[英]Service and DAO classes in JAVA
我有3个DAO和服务类,分别针对项目 , 客户和问题 。 我还有一个使用JIRA API的jiraService类。 用例是我使用API在JIRA中为客户的项目创建问题。 创建问题后,我将存储客户信息。 客户表中的响应信息。 从JIRA发布到问题表中,然后将问题ID,客户ID存储在项目表中,这样我就知道哪个问题与哪个客户和项目有关。 现在我有一些问题-
好的,首先,您不应该直接从另一个(3)调用一个DAO类,因为那样会破坏安全性。 正确的方法是创建两个对象,然后从第二个实例化第一个。 例如,您通过按客户名称搜索到的customerID,并与customerDAO对象一起存储。 然后,使用该信息,您可以使用来自customerDAO对象的信息,在projectDAO对象上获取该客户的所有项目,但不直接将customerDAO调用到de projectDAO对象中,因为这将依赖projectDAO。
您希望它们尽可能独立,因此将它们连接到另一个用作控制器的类,例如jiraService类。 这样,代码的外观应如下所示:
CustomerDAO cdao= new CustomerDAO();
ProjectDAO pdao = new ProjectDAO();
//I will suppose that you used numeric ID and use a long variable to store the result
long id=cdao.getCustomerID("MyCustomerName");//This is just an example
List<Project> lp= pdao.getProjectsByCusID(id);
然后,尽管如此,您只需要从jour jiraService类(1)调用DAO对象,因为这不会影响您的代码。
最后,正如您之前所说,DAO应该包含CRUD方法(2),这意味着您可以实现您认为将要使用的每个CRUD方法。 如果您认为需要一个getProjectsByName(String)方法,只需实现它即可,就像您自己的代码一样,并且是CRUD方法,在DAO类上也可以。
希望它有帮助:)
从上面可以明显看出,这种2N层设计。 假定以下内容:服务分别命名为ProjectService,CustomerService,IssueService和JiraService; DAO类是ProjectDAO,CustomerDAO和IssueDAO。 请记住,依赖关系必须依赖于抽象而不是依赖。 关于扎实原则的不错的文章
JiraService的目的是通过使用API来更新JIRA。 从JiraService保存到数据访问层可能并不明智,因为这违反了单一责任原则 。
进行继承的时间-父类将具有基本的CRUD操作-示例BaseDAO,所有子DAO类均可对其进行扩展。 可以将特定行为添加到子类中。 示例:CustomerDAO.getCustomerByID(),CustomerDAO.getCustomersBySurname()。
3需要定义实体之间的关系。 JPA可以用来实现这一目标。 一种替代方法是使用DAO,该DAO从相关表中检索所有数据并将数据映射到模型/值对象-示例客户,项目。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.