看了很多REST的文章, 这里谈谈对REST的个人理解.
在传统的Layered Architecture中, REST的位置应该是属于Domian Layer中的Repository, 之所以这么说的原因是, REST所针对的都是名词, 例如我们针对Player这个Aggregate的Root设计的REST服务:
REST: /Player
interface PlayerRepository{
void create(name,gender,race);
void delete(id);
void update(id,name,gender,race);
void get(id);
}
可以有很强烈的感觉, Repository大部分的职责即对应了RE
ST的GET POST PUT DELETE. 可能马上就有人会提出, 如果访问二级对象, 用Repository的方式应该如何表现呢?
事实上, 在通常的DDD设计中我们操作Aggregate内其他Entity或者Value Object是需要根据Domian knowledge来决定是否拥有这些操作, 但是在REST中真正的Domain knowledge却不存在于服务端.
也许这和真正的B/S架构背道而驰, 但这正是REST精髓之所在, 松耦合的Web service才有最大的灵活性和重用性.
REST如果承担Repository的职责那么我认为它应当单纯的执行任何具备必须权限客户端所有的CRUD请求.
REST: /Player/1/Fleet
interface FleetRepository{
void create(player, ships);
void delete(player, fleetId);
void update(player, fleetId, ships);
void get(player, fleetId);
}
在这里我们假设Fleet是一个player的内部entity, 它不需要全局标示符, 仅能通过player对象获取.
RESTful的精髓是将一切视作资源, 基于这一点, 我们能否在DDD是也将一切对象(Entity, Value Object)视作资源呢? 这样是否DDD中Repository也具备像Restful这样的低耦合和高度可扩展性呢?
分享到:
相关推荐
领域驱动设计(Domain-Driven Design, DDD)是一种软件开发方法,旨在通过紧密合作,将业务专家和开发团队的知识融合到系统设计中。DDD强调以业务领域为中心,通过识别和建模核心业务概念来构建软件。 在Spring ...
此外,DDD还提倡使用领域事件(Domain Event)和仓储(Repository)模式。领域事件用于记录系统中发生的重要业务事件,而仓储模式则提供了一种封装数据访问的手段,使得领域模型可以与具体的数据存储技术解耦。 在...
恶魔土豆项目是一个基于DDD(领域驱动设计)和NestJS框架构建的应用程序示例。DDD是一种软件开发方法,强调以业务领域为中心进行设计,通过将复杂的业务逻辑划分成清晰的领域模型来组织代码。NestJS则是一个使用...
Spring Data REST是一个强大的Java框架,它是Spring Data项目的一部分,专门设计用于简化在Spring Data存储库上构建超媒体...通过学习和掌握Spring Data REST,你可以提高开发效率,同时确保服务遵循RESTful设计原则。
4. **Domain-Driven Design (DDD)**:SpringData可以很好地与领域驱动设计相结合,通过实体(Entity)、值对象(Value Object)和仓储(Repository)等概念,帮助实现干净的业务逻辑。 5. **SpringData MongoDB**:...
5. **领域驱动设计(DDD)**:Spring Data鼓励采用领域驱动设计,将业务逻辑封装在领域模型中,使得代码更加贴近业务语境,提高软件的可理解性和可扩展性。 6. **分页和排序**:Spring Data提供了便捷的分页和排序...
系统设计与架构接下来的就是我们简单的MPESA应用程序的设计和体系结构。系统架构遵循域驱动设计原则,此应用程序被构建为Monolith应用程序。 该应用程序使用postgres数据库进行存储。系统设计域驱动设计是我们简单的...
它是一个小型的财务控制系统,使用 DDD、ASP.NET MVC、API、REST 等技术构建。 它的结构是这样的: ###存储库 FinanzKontrollen.Repository.Model:这包含从数据库映射的所有“POCO”。 FinanzKontrollen....
在软件开发中,尤其是在企业级应用的构建过程中,领域驱动设计(Domain-Driven Design,简称DDD)是一种强大的方法论,它强调通过深入理解和建模业务领域来驱动软件设计。本项目“cargotracker”就是这样一个实践了...
Começando 执行部分的应用程序: git clone https://github.com/alexandrebeato/bankflix.gitcd bankflixdocker-compose up --build -d甲aplicação角(前端)poderáSER acessadaatravés待办事项端点...