我正在创建一个数据访问对象,以便从Google App Engine中检索构建在Spring框架上的Web应用程序的信息(所有人都是第一次).
我看到许多使用Controller/webapp - > Service - > DAO - > JDO/Google-app-engine模式的示例.
在这种模式中,DAO层是唯一了解JDO的层,因此如果数据存储发生更改,则该层是唯一需要替换的层.Services层调用DAO层并格式化/操作所需的数据.
我的问题是为什么额外的服务层?至少最初看起来服务层似乎没有增加很多等式.我自然会想到只写一个DAO层来封装JDO请求并操纵和返回数据.
有人能告诉我单独的服务层的合理性,随着项目变得庞大而复杂,这会变得明显吗?
通常,您将DAO放在服务层中,因为当您的应用程序变得更复杂时,您将在服务中执行有用且非常重要的事情.例如,您可以使用多个DAO协调复杂的数据操作.服务层还提供API边界,用于划分横切关注点,例如事务管理,授权检查,性能日志记录等.
将您的功能抽象为服务的另一个原因是它可以促进可重用和可维护的组件.当你开始时,你可能只想呈现一些HTML.您编写了一个加载某些数据的服务,并处理服务层(表示层)上方层中的html部分.现在,您想要建立一个RESTful Web服务.您的服务层可以重复使用来加载数据; 你需要担心的是你的webservice端点返回的json或xml(当然还有REST语义).
因此,对于简单的情况,服务层可能添加很少,但随着您的应用程序扩展,它们变得有价值,甚至对于保持代码清洁至关重要.