想象一下,我们有一个包含三个不同层的Java项目:UI(Swing),Service和DAO。 UI调用服务,服务调用DAO。
在UI中,我们有一个带日历的过滤器。运行搜索时,日历中选定的日期(和时间)将作为参数发送到服务。
问题是这个日期的时间需要在当天的最后一秒(23:59:59)格式化,因此必须完成此格式化。
第一个问题,我在哪里格式化/更改日期和时间。在UI或服务中?因为如果我在UI中更改它,我可以在任何日期和时间重用服务方法。但是如果我在服务中更改它,如果需要当前时间而不是当天的最后一秒,我将需要服务中的新方法。
另一方面,如果存在此数据转换,将服务层命名为“服务”是一个好主意,或者更好地命名为“Action Layer”或类似的东西?
答案 0 :(得分:0)
在我们的项目中,我们还为BusinessFacade使用了一个名为'BF'的层。它位于DAO-s和服务端点之间。 (我们使用命名约定来结束具有BF结尾的类。)
我认为这是你正在寻找的“抽象层”。
大多数情况下,您需要在BF-s中进行更改,而不是服务端点。
格式化放置在用户界面中,因为我们的程序已启用I18N,不同的国家/地区使用不同的时间格式。
我喜欢这个架构,你可以为每个文件结尾附加不同的CheckStyle规则(... BF,... Service,... Dao,.. View),因此你可以强制执行一个类似的实现每个。
即:禁止特定导入,确保在服务层等中没有放置逻辑
答案 1 :(得分:0)
这取决于!作为一般建议,这种格式化会转到clint / application层,但是如果格式化是您服务的业务需求,那么它应该转到您的服务甚至是业务逻辑层。 问问自己格式是否应该始终适用。然后选择使服务更加可重用的解决方案。