Oop 类应该按功能类型还是按模型分组?
我知道标题可能不太清楚,因为我可能没有正确的术语,但举个例子应该可以说明这一点。假设我有一个带有帖子和评论的应用程序,那么将这些帖子和评论分组到不同方式的名称空间/包中的最佳实践是什么。如果没有更好的方法,两者的优点和缺点是什么。以下是我设想的几种不同方式,请注意,这并不是详尽无遗的,只是为了让大家明白这一点: (一) (二) 在一个大项目中,您可以将上述任一方法分成更广泛的组。例如,对于#1,您可以在实体、数据映射器和服务名称空间下有Db、Util、System等,并将类实现放在其中,同时将AbstractEntity类放在实体名称空间下。对于#2,您可以将这些额外的名称空间放在Abstract和Impl下Oop 类应该按功能类型还是按模型分组?,oop,architecture,Oop,Architecture,我知道标题可能不太清楚,因为我可能没有正确的术语,但举个例子应该可以说明这一点。假设我有一个带有帖子和评论的应用程序,那么将这些帖子和评论分组到不同方式的名称空间/包中的最佳实践是什么。如果没有更好的方法,两者的优点和缺点是什么。以下是我设想的几种不同方式,请注意,这并不是详尽无遗的,只是为了让大家明白这一点: (一) (二) 在一个大项目中,您可以将上述任一方法分成更广泛的组。例如,对于#1,您可以在实体、数据映射器和服务名称空间下有Db、Util、System等,并将类实现放在其中,同时将A
我倾向于#1更好,似乎我必须在两个不同的位置添加额外的Db、Util、System等名称空间。但是#2具有将与一个模型类相关的所有类保持在一起的吸引力。我拿不定主意 根据我的经验,我所看到的第一个项目远远多于后一个项目(事实上,我从未看到过一个项目在第一个项目上出现分歧) 示例:假设您有一个使用好莱坞模式的抽象类。所有实现类都应该在同一个包中。在“抽象”包中关闭“主”模板与实际实现相去甚远是没有任何意义的 我要补充的另一件事是,除了集合,所有情况下都是单数
MyAp
|--Entity
| |--AbstractEntity.class
| |--Comment.class
| |--Post.class
|--DataMapper
| |--AbstractDataMapper.class
| |--CommentDataMapper.class
| |--PostDataMapper.class
|--Service
| |--AbstractService.class
| |--CommentService.class
| |--PostService.class
我认为这两种方法都有问题 大多数开发人员倾向于通过其主要专业化来打破类。映射器应该转到映射器,模型应该转到模型,助手应该转到助手,接口到接口,我们认为首先。在项目开始时,这可能是一个简单的决定,但随着时间的推移,它会带来一些痛苦。有时候看起来很愚蠢。特别是当您需要将特定功能提取到单独的组件中时 根据我的经验,我可以说,您应该按照类的高级函数或“子系统”,或者现在DDD指定的“有界上下文”,对类进行分组。同时,不应该有很高的分组级别 所以-我可以看到您的所有实体都属于发布上下文。这看起来很奇怪,但我建议你把所有的类放到
Posting
fodler中,不要创建额外的子文件夹,除非你在上下文中有一个非常特定的功能区域
MyAp
|--Core
|--AbstractEntity.class
|--AbstractDataMapper.class
|--AbstractService.class
|--Posting
|--Comment.class
|--Post.class
|--CommentDataMapper.class
|--PostDataMapper.class
|--CommentService.class
|--PostService.class
一般来说,您的第二种方法看起来类似。在这种情况下,您可以轻松添加越来越多的上下文特定文件夹。比如-‘投票’、‘通知’、‘身份验证’等等。我还建议选择最简单的方式,等到你有了一些‘临界数量’的类,这样你就有了关于如何正确分组类的足够信息
使用第一种方法,域的上下文将分布在所有文件夹中 一些框架(如JaxB)将配置信息放入package-info.java中。在这种情况下,第一种方法必须能够使用package-info.java
MyAp
|--Entity
| |--AbstractEntity.class
| |--Comment.class
| |--Post.class
|--DataMapper
| |--AbstractDataMapper.class
| |--CommentDataMapper.class
| |--PostDataMapper.class
|--Service
| |--AbstractService.class
| |--CommentService.class
| |--PostService.class
MyAp
|--Core
|--AbstractEntity.class
|--AbstractDataMapper.class
|--AbstractService.class
|--Posting
|--Comment.class
|--Post.class
|--CommentDataMapper.class
|--PostDataMapper.class
|--CommentService.class
|--PostService.class