我有一个小应用程序的经典层控制器-服务-Dao。控制器实际上是REST资源,它处理JSON数据。问题是: 1.从JSON原语创建业务对象的最佳位置在哪里?控制还是服务?控制器应该将原语从JSON传递到服务方法吗? 2.如果应该在控制器层中创建对象,那么传递服务方法原语值是否具有良好的风格,如果它是一种id搜索方法?
更新1.我指的是java:
serviceSearchMethod(int value1, String value2);
vs
SomeObject someObject = new SomeObject(int value1, String value2);
serviceSearchMethod(someObject);
当然,someObject
可以包含10个字段,但是控制器只有2个值,所以在这种情况下,它是好的创建业务对象( BO ),还是只适用于如果我可以创建BO,这不仅是DTO的服务层,而是一些有价值的东西,从业务的角度来看?
发布于 2016-02-28 04:12:35
我更喜欢尽快将JSON转换为业务对象,这通常是在REST控制器类中完成的。这是有原因的:
但有一点需要注意--我的经验是使用Java服务。如果您正在运行服务器端Javascript框架,则可能需要考虑其他事项。
发布于 2016-02-28 11:53:29
我使用了许多这样的系统(构建于PHP,而不是Java,但这是相同的原则),我同意@kiwiron的观点:最好在Controller层中这样做。
以下是我建议这样做的几个理由:
Accept
和Content-Type
headers来协商进出系统的内容(这很好,因为您可以方便地同时支持多种格式)。由于您的服务层和DAO层应该完全不了解与外部世界的通信,所以在Controller层中应该负责确定客户机/调用者提供和请求的内容(使用那些HTTP报头)。然而,有一个小问题,在许多这样的系统中,这可能是一个常见的情况:如果您有3个依赖于相同服务的控制器(来自服务层),该怎么办?上面描述的最佳实践是让控制器创建模型/实体对象.但如果他们都这么做,那么我们就不会有这么严重的违反干燥原则。
因此,这是我的建议:
https://softwareengineering.stackexchange.com/questions/311284
复制相似问题