例如,您可以使用实体控制边界模式。
您的包结构将如下所示:
在您的应用程序的命名空间下,您可以引入一个名为“business”的包,在该包中可以有由业务职责命名的包,这些包分为“实体”、“控制”和“边界”。
com.example.myapplication.business.project.entity -> 如果您使用 JPA,您的所有实体都可以存储在此包中,包含 DTO
com.example.myapplication.business.project.control -> 在这个包中可以存储重构的服务,例如,如果不止一个边界需要DAO-Code,代码可以在这个包中重构
com.example.myapplication.business.project.boundary -> 这个包包含客户端可以看到的所有服务(例如你的网页)
在“presentation”包中可以存储你的 ui 控制器,并且 ui 控制器应该只访问存储在边界包中的服务。
com.example.myapplication.presentation.project
通过使用这种模式,您可以避免使用委托,因为存储在边界包中的服务也可以包含特定于 sql 的内容,并且所有服务和实体都在它们所属的包中。
该模式也可以在 JEE 之外使用。 Adam Bien 在 JEE 架构中彻底改变了这种模式,我也在自己的项目中使用它。这是一个例子 -> http://www.youtube.com/watch?v=JWcoiXNoKxk#t=2380
您的边界方法可能如下所示:
public interface ProjectService {
public Project createProject(Project project);
public Project getProjectById(String projectId);
public List<Project> getProjectList(ListConfig config); // where ListConfig is a class containing information of how the list should be sorted, optional pagination information, etc, so that the interface must not be changed every time you need a new parameter
public Project updateProject(Project project);
public void deleteProject(String projectId);
public Project addFeature(Project project, Feature feature);
}
@ayan ahmedov:对不起,我第一次尝试回答你的问题时,很遗憾我编辑了你的问题,我的答案在你问题的内容区域。我已经“还原”了意外更改。