我相信模板方法模式涉及封装算法中的每一步.
我认为活动的生命周期(onCreate,onResume等)是必须由具体类覆盖的步骤.
这是否意味着Android活动生命周期(活动和片段类)符合模板设计模式,或者是否存在更适合它的不同模式
谢谢
Spring将bean范围提供为"Prototype".意味着只要应用程序中需要bean,Spring容器就会创建一个新的/新的bean实例.是否遵循原型设计模式?它是否只创建一次对象并在后续请求中调用创建的对象上的clone()方法来创建新对象?
此外,如果有人可以在JDK,Spring,Hibernate或任何J2EE框架中提供原型示例.
我已经看过两种方式的例子,特别是维基百科显示了访问对象决定访问顺序的一个例子,我认为这是一种听起来很好的方法.
我处于这种情况,我需要几个访问订单,所以让访客决定访问订单似乎是合理的.但是,如果访问者负责访问顺序(即,用于调用被访问对象的accept方法),我可以让访问者直接调用一些访问方法(即,绕过访问对象的accept方法的调用)和这似乎与模式提出的完全相反.
在我们有多个不同的访问订单时,实施访问模式以及如何处理的正确方法是什么?
我目前有4种类型的用户,我们预测将来至少还有3种.现在它们是:
在不久的将来,我将不得不让两位员工同时成为客户.我也有支持中心和记者.
创建.创建.创建.我并不担心访问控制,权限等...我现在的代码可以在这方面做奇迹.我的问题只是关于创造.似乎抽象工厂对我来说可能是一个,但事实是所有那些"抽象教程"教学设计模式使用书籍和汽车只是没有帮助我把它带到我的情况.要么我的设计模式错误,要么我不理解它.
在UserFactory类中,我们可以看到问题的根源:abstract public function signUp();.这是不好的做法,甚至导致PHP 5.4+上的严格标准错误不尊重方法签名.在Java中,我会有方法重载来解决这个问题.在PHP中,方法重载的工作方式不同,不允许我以这种方式工作.
<?php
abstract class UserFactory {
const ADMIN = 'AdminRecord';
const MANAGER = 'ManagerRecord';
const SALESMAN = 'SalesmanRecord';
const CUSTOMER = 'CustomerRecord';
public static function manufacture($type) {
return new $type;
}
protected $accountController;
protected $emailController;
protected $toolMailer;
function __construct() {
$this->accountController = new AccountController();
$this->emailController = new EmailController();
$this->toolMailer = new ToolMailer();
}
abstract public function signUp();
}
Run Code Online (Sandbox Code Playgroud)
这是我的第一个用例:创建一个新的管理员.
class AdminRecord extends UserFactory { …Run Code Online (Sandbox Code Playgroud) 我正在开发一个严重依赖Joda-Money的应用程序,并且有许多单元测试来验证我的业务逻辑.对我来说,一个(不可否认的是次要的)关键点是用什么样的Money/ BigMoney对象进行测试; 具体来说,CurrencyUnit使用什么.
在我看来,我有几个选择:
只是用 USD
这显然是最简单的方法,我的大多数实际应用都将使用美元,因此它有一定的意义.另一方面,它感觉相当以美国为中心,我担心它会冒险让特定货币的错误不受控制.
使用另一种真实货币,比如 CAD
这会捕获错误的硬编码USD,但除此之外并没有比使用更好USD.
使用专用的"假"货币,即XTS
毕竟,这显然XTS是"保留用于测试".但Joda将伪货币表示为带-1小数位的货币.实际上,Joda-Money中货币之间的主要区别是小数位数,因此这可能会掩盖涉及小数位精度的任何错误,例如错误地舍入为整数值.
注册我自己的自定义货币 CurrencyUnit.registerCurrency()
这显然有效,但看起来有点奇怪,因为有其他选择.
使用CurrencyUnit由模拟库创建的实例
与注册自定义货币几乎相同.
再次,这显然是一个小问题,但我很好奇是否有这样的案例的标准做法,或者是否有明确的理由特别喜欢这些选项之一.
我想正式注释我的函数签名以澄清他们的契约 - 特别是如果null允许或禁止params和返回值 - 以FindBugs的静态代码分析工具(可能还有其他)可以使用它的方式.
有两个包(annotations.jar和jsr305.jar),每个包含四个注释,以及不添加注释的选项.
有没有办法阻止图像上传到docker hub与现有图像相同的标签?我们的用例如下.
我们使用docker-compose文件部署到生产环境,并将图像标记作为版本号.为了支持回滚到先前的环境和幂等部署,必须使某个标记的泊坞窗图像始终引用相同的图像.
但是,docker hub允许使用与现有图像相同的标签上载图像(它们覆盖旧图像).这完全打破了对图像进行版本控制的想法.
我们目前有一些解决方法,包括我们的构建脚本拉动图像的所有版本,并查看标签以检查覆盖不会发生等等,但感觉必须有更好的方法.
如果docker hub不支持这个,有没有办法在没有docker hub的情况下进行docker部署?
在部署到Heroku时,我收到"错误:找不到模块"错误.
// package.json
{
"name": "AppName",
"version": "1.0.0",
"description": "== README",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "somerepo.git"
},
"author": "",
"license": "ISC",
"dependencies": {
"browserify": "^11.0.1",
"browserify-incremental": "^3.0.1",
"object-assign": "^3.0.0",
"react": "^0.13.3",
"react-image-gallery": "^0.4.1",
"reactify": "^1.1.1",
"superagent": "^1.3.0"
},
"devDependencies": {
"es6-promise": "^2.3.0"
}
}
Run Code Online (Sandbox Code Playgroud)
这是我运行"git push heroku master"时的日志
remote: -----> Build succeeded!
remote: ??? browserify@11.0.1
remote: ??? browserify-incremental@3.0.1
remote: ??? object-assign@3.0.0
remote: ??? react@0.13.3
remote: …Run Code Online (Sandbox Code Playgroud) 我试图遵循接口隔离和单一职责原则,但是我对如何将它们整合在一起感到困惑。
在这里,我有一个示例,其中有一些接口,我已将其拆分为更小、更直接的接口:
public interface IDataRead
{
TModel Get<TModel>(int id);
}
public interface IDataWrite
{
void Save<TModel>(TModel model);
}
public interface IDataDelete
{
void Delete<TModel>(int id);
void Delete<TModel>(TModel model);
}
Run Code Online (Sandbox Code Playgroud)
我稍微简化了它(有一些where条款妨碍了可读性)。
目前我正在使用SQLite ,但是,这种模式的美妙之处在于,如果我选择不同的数据存储方法(例如Azure),它有望让我有机会更好地适应变化。
现在,我对每个接口都有一个实现,下面是每个接口的简化示例:
public class DataDeleterSQLite : IDataDelete
{
SQLiteConnection _Connection;
public DataDeleterSQLite(SQLiteConnection connection) { ... }
public void Delete<TModel>(TModel model) { ... }
}
...
public class DataReaderSQLite : IDataRead
{
SQLiteConnection _Connection;
public DataReaderSQLite(SQLiteConnection connection) { ... }
public …Run Code Online (Sandbox Code Playgroud) c# interface single-responsibility-principle solid-principles interface-segregation-principle
那么,如果我写一个异步命令,那是否会不可避免地违反CQS原则?
c# ×2
java ×2
android ×1
annotations ×1
async-await ×1
browserify ×1
docker ×1
dockerhub ×1
findbugs ×1
heroku ×1
interface ×1
interface-segregation-principle ×1
joda-money ×1
php ×1
reactjs ×1
signature ×1
single-responsibility-principle ×1
spring ×1
unit-testing ×1
visitor ×1