程序设计 – 按function与层或两者打包?
我正处于Web应用程序的设计阶段,该应用程序允许用户创建工作请求,工作人员可以根据这些请求投入时间。 该应用程序还将为主管提供报告function,以获取每日总计,报告和帐户所花费的时间,“成本分配”。
我过去使用的应用程序是使用逐层方法设计的。 我认为通过function设计使用包会更有效率,我对这个设计有疑问。
我目前正在考虑的function包:
- 请求 – CRUD请求,然后分配,添加发票号等…
- 工作时间 – 用户针对请求,假期,培训或会议的每日时间
- 成本分配 – 创建报告,会计师想要的会计事项……
前端将是Tomcat服务器和JSP。 而且,后端将是一个Oracle数据库,EclipseLink执行持久性。
我的问题:
在我对按function分组的理解中,实体和DAO将进入与它们相关联的包。 在多个包中展开持久层。 将包从其他包中调用实体。 所有的重叠是否真的有用? 包之间没有隔离。 使用打包function有什么优缺点? 使用额外的持久层是否是一个好的设计? 或者,我是否完全理解这一点?
我建议根据业务实体启动包装。 在那里你可以根据图层划分事物。
所有的重叠是否真的有用?
我练了很久。 我认为这种方法没有任何重大问题。 您必须找出要解耦的内容以及应该解耦的内容。 例如,使用orders
提供的API从customer
包调用持久性orders
方法对我来说非常好。
使用打包function有什么优缺点?
我发现它比严格的层面包装更简单,直观,易懂和易于使用。 当您想要将东西拆分并分配到不同的地方时,它会带来好处。
使用额外的持久层是否是一个好的设计?
看看这个SO线程, 我发现JPA,或类似的,不鼓励DAO模式 。
进一步阅读
- 通用存储库和DDD
5年后……
(悬疑音乐在后台)
想象一下这种荒谬的情况:
管理公司,程序员公司,人力资源公司和营销公司,程序员公司只有程序员,没有经理,市场营销人员或人力资源;
我们不希望通过他们的职业而不是组织(自我协调)团队来分割同事,或者我们会不会?
按原样包装东西,而不是根据它做什么,只会让你跳到你想要的地方10次。
现在不只是看起来很性感吗? 通过查看结构,您已经可以了解应用程序的全部内容。 不满意? 阅读全文 。
如果我按function和逐层选择两个包。 我会逐层选择。
有几个原因,
- 在分层结构中,界面/依赖关系应该在层之间明确定义,如果你是否引入不想要的依赖关系,适当的包装将很快突出显示
- 它将来自其他层的一个层中的依赖关系(例如,使用Oracle的持久性)隔离开来。
- 我觉得单独考虑每一层更清洁
但要回答你的问题function与图层或两者,我会说两者,主要是通过图层然后按function打包。