小编Dav*_*uth的帖子

"android活动生命周期"是否使用模板方法模式?

我相信模板方法模式涉及封装算法中的每一步.

我认为活动的生命周期(onCreate,onResume等)是必须由具体类覆盖的步骤.

这是否意味着Android活动生命周期(活动和片段类)符合模板设计模式,或者是否存在更适合它的不同模式

谢谢

android design-patterns template-method-pattern

6
推荐指数
1
解决办法
541
查看次数

Spring原型遵循原型设计模式

Spring将bean范围提供为"Prototype".意味着只要应用程序中需要bean,Spring容器就会创建一个新的/新的bean实例.是否遵循原型设计模式?它是否只创建一次对象并在后续请求中调用创建的对象上的clone()方法来创建新对象?

此外,如果有人可以在JDK,Spring,Hibernate或任何J2EE框架中提供原型示例.

spring design-patterns prototype-pattern

6
推荐指数
1
解决办法
2006
查看次数

访客模式:访客或访问对象是否应该决定访问顺序?

我已经看过两种方式的例子,特别是维基百科显示了访问对象决定访问顺序的一个例子,我认为这是一种听起来很好的方法.

我处于这种情况,我需要几个访问订单,所以让访客决定访问订单似乎是合理的.但是,如果访问者负责访问顺序(即,用于调用被访问对象的accept方法),我可以让访问者直接调用一些访问方法(即,绕过访问对象的accept方法的调用)和这似乎与模式提出的完全相反.

在我们有多个不同的访问订单时,实施访问模式以及如何处理的正确方法是什么?

design-patterns visitor

6
推荐指数
1
解决办法
710
查看次数

PHP中的AbstractFactory没有方法重载

情况

我目前有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)

php design-patterns abstract-factory

6
推荐指数
1
解决办法
333
查看次数

在单元测试中使用什么货币?

我正在开发一个严重依赖Joda-Money的应用程序,并且有许多单元测试来验证我的业务逻辑.对我来说,一个(不可否认的是次要的)关键点是用什么样的Money/ BigMoney对象进行测试; 具体来说,CurrencyUnit使用什么.

在我看来,我有几个选择:

  • 只是用 USD

    这显然是最简单的方法,我的大多数实际应用都将使用美元,因此它有一定的意义.另一方面,它感觉相当以美国为中心,我担心它会冒险让特定货币的错误不受控制.

  • 使用另一种真实货币,比如 CAD

    这会捕获错误的硬编码USD,但除此之外并没有比使用更好USD.

  • 使用专用的"假"货币,即XTS

    毕竟,这显然XTS是"保留用于测试".但Joda将伪货币表示为带-1小数位的货币.实际上,Joda-Money中货币之间的主要区别是小数位数,因此这可能会掩盖涉及小数位精度的任何错误,例如错误地舍入为整数值.

  • 注册我自己的自定义货币 CurrencyUnit.registerCurrency()

    这显然有效,但看起来有点奇怪,因为有其他选择.

  • 使用CurrencyUnit由模拟库创建的实例

    与注册自定义货币几乎相同.

再次,这显然是一个小问题,但我很好奇是否有这样的案例的标准做法,或者是否有明确的理由特别喜欢这些选项之一.

java unit-testing joda-money

6
推荐指数
1
解决办法
283
查看次数

如何正确使用FindBugs的@CheckForNull,@ Nonull和@Nullable注释

我想正式注释我的函数签名以澄清他们的契约 - 特别是如果null允许或禁止params和返回值 - 以FindBugs的静态代码分析工具(可能还有其他)可以使用它的方式.

有两个包(annotations.jarjsr305.jar),每个包含四个注释,以及不添加注释的选项.

java annotations findbugs signature

6
推荐指数
1
解决办法
7537
查看次数

如何防止docker hub上的docker镜像被覆盖?

有没有办法阻止图像上传到docker hub与现有图像相同的标签?我们的用例如下.

我们使用docker-compose文件部署到生产环境,并将图像标记作为版本号.为了支持回滚到先前的环境和幂等部署,必须使某个标记的泊坞窗图像始终引用相同的图像.

但是,docker hub允许使用与现有图像相同的标签上载图像(它们覆盖旧图像).这完全打破了对图像进行版本控制的想法.

我们目前有一些解决方法,包括我们的构建脚本拉动图像的所有版本,并查看标签以检查覆盖不会发生等等,但感觉必须有更好的方法.

如果docker hub不支持这个,有没有办法在没有docker hub的情况下进行docker部署?

continuous-delivery docker dockerhub

6
推荐指数
2
解决办法
4535
查看次数

Heroku + browserify-rails:错误:找不到模块

在部署到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)

ruby-on-rails heroku browserify reactjs

6
推荐指数
1
解决办法
577
查看次数

接口隔离和单一责任原则的问题

我试图遵循接口隔离单一职责原则,但是我对如何将它们整合在一起感到困惑。

在这里,我有一个示例,其中有一些接口,我已将其拆分为更小、更直接的接口:

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

6
推荐指数
2
解决办法
1623
查看次数

是否返回违反CQS原则的任务?

那么,如果我写一个异步命令,那是否会不可避免地违反CQS原则?

c# command-query-separation async-await

6
推荐指数
2
解决办法
320
查看次数