程序设计 – 按function与层或两者打包?

我正处于Web应用程序的设计阶段,该应用程序允许用户创建工作请求,工作人员可以根据这些请求投入时间。 该应用程序还将为主管提供报告function,以获取每日总计,报告和帐户所花费的时间,“成本分配”。

我过去使用的应用程序是使用逐层方法设计的。 我认为通过function设计使用包会更有效率,我对这个设计有疑问。

我目前正在考虑的function包:

  1. 请求 – CRUD请求,然后分配,添加发票号等…
  2. 工作时间 – 用户针对请求,假期,培训或会议的每日时间
  3. 成本分配 – 创建报告,会计师想要的会计事项……

前端将是Tomcat服务器和JSP。 而且,后端将是一个Oracle数据库,EclipseLink执行持久性。

我的问题:

在我对按function分组的理解中,实体和DAO将进入与它们相关联的包。 在多个包中展开持久层。 将包从其他包中调用实体。 所有的重叠是否真的有用? 包之间没有隔离。 使用打包function有什么优缺点? 使用额外的持久层是否是一个好的设计? 或者,我是否完全理解这一点?

我建议根据业务实体启动包装。 在那里你可以根据图层划分事物。

所有的重叠是否真的有用?

我练了很久。 我认为这种方法没有任何重大问题。 您必须找出要解耦的内容以及应该解耦的内容。 例如,使用orders提供的API从customer包调用持久性orders方法对我来说非常好。

使用打包function有什么优缺点?

我发现它比严格的层面包装更简单,直观,易懂和易于使用。 当您想要将东西拆分并分配到不同的地方时,它会带来好处。

使用额外的持久层是否是一个好的设计?

看看这个SO线程, 我发现JPA,或类似的,不鼓励DAO模式 。

进一步阅读

  • 通用存储库和DDD

5年后……

(悬疑音乐在后台)

想象一下这种荒谬的情况:

管理公司,程序员公司,人力资源公司和营销公司,程序员公司只有程序员,没有经理,市场营销人员或人力资源;

我们不希望通过他们的职业而不是组织(自我协调)团队来分割同事,或者我们会不会?

按原样包装东西,而不是根据它做什么,只会让你跳到你想要的地方10次。

按功能打包,而不是图层。

现在不只是看起来很性感吗? 通过查看结构,您已经可以了解应用程序的全部内容。 不满意? 阅读全文 。

如果我按function和逐层选择两个包。 我会逐层选择。

有几个原因,

  • 在分层结构中,界面/依赖关系应该在层之间明确定义,如果你是否引入不想要的依赖关系,适当的包装将很快突出显示
  • 它将来自其他层的一个层中的依赖关系(例如,使用Oracle的持久性)隔离开来。
  • 我觉得单独考虑每一层更清洁

但要回答你的问题function与图层或两者,我会说两者,主要是通过图层然后按function打包。