伙计们,我是Java EE的新手,我现在正在设计服务层。我对我应该从控制器层,整个对象传递给方法的参数感到非常困惑?或只是它的重要参数?
例如,如果我想创建一篇文章,这里是代码。
第一种方式
public void createArticle(Article article) {
articleDAO.create(article);
}
第二种方式
public void createArticle(String title, String subtitle) {
Article article = new Article();
article.setTitle(title);
article.setSubtitle1(subtitle);
articleDAO.create(article);
}
所以请帮助我,我应该遵循哪种方式?我很困惑,谢谢!
答案 0 :(得分:1)
服务层实现/专用于业务逻辑目的。
两者都是有效的,没有任何伤害。他们工作。并且还要考虑服务方法有15个参数的情况。来到这个模式,我建议你改变数据传输的方式。一般来说,我们从客户/其他方面收到的是DTO和服务层将它们转换为DAO可理解的实体,并且服务再次将它们转换回DTO以继续进一步隐藏您的实际实体。
public void createArticle(ArticleDTO dto) {
Article article = new Article();
// some business logic.
article.setTitle(dto.getTitle());
article.setSubtitle1(dto.getSubTitle());
// more business may be.
articleDAO.create(article);
}
答案 1 :(得分:1)
你可以同时使用两者,一个好的做法是不超过4或5个参数。
更好的做法是使用DTO(数据传输对象,如Article类),因为它易于阅读,并为扩展新数据的功能提供了更好的支持。未来的您(或您的团队)将不胜感激,以避免重构您的代码。
答案 2 :(得分:1)
你的问题终于来了:你的控制器是应该创建结构化对象并将其传递给服务,还是应该在接收到数据时将数据传递给服务,这里是单独的?
作为一般方法,尽可能快地传递结构化对象会产生比在方法中传递多个参数并等待下一层聚合对象更简洁的代码。
想象一下这样的方法:
public void createArticle(String title, String subtitle, String category, String authorFirstName, String authorLastName, etc...) {
....
}
显然很笨拙且容易出错。
出于这个原因,您希望控制器将每个信息单独提供给服务?
我至少看到一个案例:当我们需要在创建Article
对象之前应用规则检查,并且我们想要在服务层中执行它。
但是,我们仍然没有被迫按此顺序这样做。我们可以使用Article
实例检查Article
规则。
就个人而言,我没有任何理由推迟Article
实例的创建。
这看起来很好:
public void createArticle(Article article) {
articleDAO.create(article);
}
选择一种方式和整体,保持一致。
答案 3 :(得分:0)
嗯,这取决于。如果您认为将来Article
课程会扩展,并且可能会有更多字段,例如publishDate
,author
等,那么我认为最好采用第一种方法。
public void createArticle(Article article) {
articleDAO.create(article);
}
另外,使用第二种方式会增加代码中的行数。代码应该简短。
答案 4 :(得分:0)
我认为传递一个对象是一个很好的策略,特别是当你需要将一些变量传递给一个方法时。而不是传递所有这些变量只是传递对象的实例来整理您的方法签名。
答案 5 :(得分:0)
两种方法似乎都能正常工作 想想以后要对该方法做什么:
当你已经有一个文章实例时,检索参数是没有意义的(稍后可能还有一个作者和更多参数,所以你必须重做方法2的方法,而方法1仍然有效)。
但是如果你想在方法调用方法2上创建文章可能会很好。
所以你看到:在大多数情况下,方法1更好,因为它更灵活 尝试使用 KISS -principle:保持简单,愚蠢! (有些人可能知道KISS也是'保持简短,简单')
答案 6 :(得分:0)
问题非常好。实际上你无法直接说出哪种方法好或坏,这取决于你必须在代码中实现的要求。让我们讨论每种方法
第一种方法
public void createArticle(Article article) {
articleDAO.create(article);
}
通常我们在需要时将对象作为参数传递给方法 将对象推送到其他服务或我们几乎需要的时候 该对象的所有参数或我们需要的参数计数 那个对象太高了。
第二种方法
public void createArticle(String title, String subtitle) {
Article article = new Article();
article.setTitle(title);
article.setSubtitle1(subtitle);
articleDAO.create(article);
}
在第二种方法中,您通常使用此方法传递参数 当你只需要对象的一些参数而不是 完整的对象或参数的数量是一个小的计数,以便 开发人员每次都传递所有参数并不繁琐。