首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

业务逻辑应该放在域还是服务中?

在软件开发中,业务逻辑应该放在域(Domain)或服务(Service)中。这取决于您的架构设计和项目需求。以下是关于这两个选项的概述:

域(Domain)

域是一个表示特定业务领域的概念,它包含了业务逻辑、数据模型和验证规则。域通常与实际业务需求紧密相关,例如订单管理、用户认证等。将业务逻辑放在域中有助于保持代码的整洁和可维护性。

优势

  • 更好地组织代码,将相关的业务逻辑放在一起。
  • 更容易理解和维护代码,因为它遵循领域专业术语。
  • 更容易与其他系统集成,因为它遵循标准的业务术语。

应用场景

  • 当您的项目需要处理复杂的业务逻辑时。
  • 当您希望代码结构清晰、易于理解和维护时。

服务(Service)

服务是一个表示特定功能的概念,它提供了一组相关的操作和功能。服务通常与技术需求紧密相关,例如身份验证、数据存储等。将业务逻辑放在服务中有助于保持代码的通用性和可重用性。

优势

  • 更好地组织代码,将相关的功能放在一起。
  • 更容易重用代码,因为它遵循通用的服务术语。
  • 更容易与其他系统集成,因为它遵循标准的服务术语。

应用场景

  • 当您的项目需要提供通用功能时。
  • 当您希望代码结构通用、易于重用时。

推荐的腾讯云相关产品和产品介绍链接地址

  • 腾讯云云巢:一种基于 Kubernetes 的容器管理服务,可以帮助您更好地组织和管理业务逻辑。
  • 腾讯云微服务:一种基于 Spring Cloud 的微服务框架,可以帮助您更好地组织和管理业务逻辑。
  • 腾讯云 API 网关:一种服务,可以帮助您更好地管理和维护 API 接口。

请注意,这些产品并不是专门针对业务逻辑的,而是可以帮助您更好地组织和管理业务逻辑的工具。您可以根据您的项目需求和技术栈选择合适的产品。

相关搜索:WCF /客户端应用程序 - 业务逻辑应该放在哪里?使用redis作为核心BD时,我的业务逻辑应该放在哪里MVC中的"母版页"逻辑应该放在哪里?对于业务逻辑失败,我应该抛出400或500服务错误吗?我应该把业务逻辑放在netty4中的什么地方?在chanelRead0()中或运行任务?我应该把JWT逻辑放在web api中的什么地方?在MVC中,分页信息应该放在路径还是查询字符串中?REST API中的链接应该放在响应头还是响应体中?Prism MVVM,我应该将IRegionManager放在ViewModel中还是其他地方?应该将额外的文件放在raw还是assets文件夹中?我应该在iOS、Swift的VIPER架构中的哪里定义业务逻辑六边形架构-我应该将存储库接口放在域层还是应用层我应该将 .hpp 和 .cpp 放在同一折叠中还是分别放在 ./src 和 ./hdr 中?当使用JWT进行身份验证时,自定义作用域(权限/声明)应该放在访问令牌中还是id令牌中?如何将服务中的业务逻辑编写为ExpressJS中的sinon在服务层中,我们需要在何处包含非业务逻辑验证您是应该将用户数据放在单个MySQL数据库的表中,还是应该将用户数据放在单独的数据库中?WebApp将静态的HTML/JS文件放在WAR中还是放在单独的WAR服务器中?将逻辑放在无状态子组件中,还是将正确的值发送回有状态父组件并在那里执行逻辑?我应该使用单例还是作用域服务在ASP.NET核心中进行api调用?
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Spring Web 应用的最大败笔

    开发人员在使用Spring应用是非常擅长谈论依赖注入的好处。不幸的是,他们不是那么真的利用它的好处,如单一职责原则,分离关注原则。如果我们一起来看看大部分Spring的Web应用程序,常见的错误的设计如下: 1.领域模型对象用来存储应用的数据(当作DTO使用),领域模型是贫血模型这样的反模式。 2.服务层每个实体有一个服务。 问题是这样很普遍,错误在哪里呢? Spring的web应用程序之所以这样是因为他们做事物的方式一直都是这样做的,老习惯难改,特别是如果他们是高级开发人员或软件架构师,这些人捍卫这样做的论据之一是:我们的应用程序遵循关注分离的原则,因为它已经被分为若干层,每个层有自己的特定职责。 1. Web层负责处理用户输入,并返回正确的响应返回给用户。 web层与服务层通信。 2.服务层作为一个事务边界。它也负责授权和包含我们的应用程序的业务逻辑。服务层管理的域模型对象,并与其他服务和存储库层进行通信。 3.存储库/数据访问层负责与所使用的数据的存储进行通信。 分离关注(Soc)是分离计算机程序为不同的部分,每个部分有一个关注聚焦,一个典型的Spring Web应用在一定程度上遵循这一原则,但现实是,该应用程序有一个整体的服务层,它有太多的责任。更具体地,服务层有两个主要问题: 1.在服务层发现业务逻辑 业务逻辑被分散在各个服务层。如果我们需要检查一个业务规则是如何实现的,我们必须先找到它。这可能并不容易。此外,如果相同的业务规则需要在多个服务类,问题是,规则需要从一个服务到另一个简单地复制。这将导致维护的噩梦。 2.每个领域模型一个服务 这完全违反了单一职责原则,它被定义为如下:单一职责原则指出,每一个类都应该有一个责任,责任应该由类完全封装。其所有的服务应该狭义与责任相一致。(不应将原属于领域模型的行为方法等划放在服务中实现,对象不但有属性还有行为) 服务类有很多依赖,以及大量的循环依赖。更像网络紧密耦合和单片服务。这使得很难理解,维护和重用。这听起来有点苛刻,但一个Spring的web应用的服务层往往是最容易出问题的部分。幸运的是,所有的希望都不会丢失。 1. 我们必须将我们的应用程序的业务逻辑从服务层迁移到领域模型类中。 举个例子:假设我是一个服务类,你是一个域模型对象。如果我让你从屋顶上跳下来,你会喜欢我这样的决定吗?(跳下来会摔伤,自己没有脑子或被洗脑,变成僵尸,只听从执行,不思考自己的安全,这就是贫血模型的问题) 将业务逻辑从服务层迁移到域模型类有下面三个优势: (1)我们的代码将以逻辑方式切割,服务层只要关注应用逻辑,而我们的领域模型关注业务逻辑。 (2)业务逻辑只存在一个地方,容易发现修改。 (3)服务层的源代码是清洁的,不包含任何复制粘贴代码 2. 将每个实体服务切割为单一目标的更小的服务。 比如,有一个单一服务类,提供对人员和用户账户的CRUD操作,我们应该将它分为两个独立的服务类: 第一个是对人员的提供CRUD操作 第二个是提供与用户账户相关的操作。 好处:每个服务类中有一个逻辑组职责。每个服务类的依赖较少,这意味着他们不再是紧耦合的源头。他们是较小的和松耦合的组件。服务类更容易理解,维护和重用。 这两个简单的步骤将帮助我们使得我们的应用程序架构更干净,有助于同行开发商提高生产力和幸福。

    01

    领域驱动设计(DDD)理论启示

    过去几年通天塔一直处于快速的业务能力建设和架构完善的阶段,以应对不断增长的业务需求和容量、高可用等技术需求,现在通天塔平台已经能满足集团主站的大部分活动、频道搭建和运营能力,主流程的新需求越来越少,个性化需求和非标准化流程的数据源和服务接入的需求越来越多,有些甚至是京东零售体系外的,同时通天塔技术和产品也在积极主动寻求变化和创新,这些因素结合在一起驱动通天塔孵化出了一个以技术为导向的项目:通天塔积木,旨在构建一个基于完全开放的前端SDK和后端数据源&服务、高度灵活和强大的积木画布、能够快速移植和部署到任何第三方IT环境的活动搭建解决方案,这套方案的初衷和设计理念也契合了京东国际化赋能和PaaS化的战略。目前通天塔积木已经取得阶段性成果,已开始赋能京东国内和国际站,但如何应对异常复杂的积木业务逻辑和不可预知的业务变化,构建业务和底层技术基础实施的完全解耦的系统,一直是我们面对的巨大挑战。也是时候从更高视角来看清问题和源头,思考一种能应对和控制业务复杂度、具备强扩展性和弹性的解决方案。纵观我们的目标,DDD这个词不知不觉映入了我的眼帘。

    00

    京东平台研发:领域驱动设计(DDD)实践总结

    过去几年,通天塔一直处于快速的业务能力建设和架构完善的阶段,以应对不断增长的业务需求和容量、高可用等技术需求,现在通天塔平台已经能满足集团主站的大部分活动、频道搭建和运营能力,主流程的新需求越来越少,个性化需求和非标准化流程的数据源和服务接入的需求越来越多,有些甚至是京东零售体系外的,同时通天塔技术和产品也在积极主动寻求变化和创新,这些因素结合在一起驱动通天塔孵化出了一个以技术为导向的项目:通天塔积木,旨在构建一个基于完全开放的前端 SDK 和后端数据源&服务、高度灵活和强大的积木画布、能够快速移植和部署到任何第三方 IT 环境的活动搭建解决方案,这套方案的初衷和设计理念也契合了京东国际化赋能和 PaaS 化的战略。

    02

    驱动领域DDD的微服务设计和开发实战

    你是否还在为微服务应该拆多小而争论不休?到底如何才能设计出收放自如的微服务?怎样才能保证业务领域模型与代码模型的一致性?或许本文能帮你找到答案。 本文是基于 DDD 的微服务设计和开发实战篇,通过借鉴领域驱动设计思想,指导微服务项目团队进行设计和开发(理论篇详见《当中台遇上 DDD,我们该如何设计微服务?》)。本文包括三部分内容:第一部分讲述领域驱动设计基本知识,包括:分层架构、服务视图、数据视图和领域事件发布和订阅等;第二部分讲述微服务设计方法、过程、模板、代码目录、设计原则等内容;最后部分以一个项目为例讲述基于 DDD 的微服务设计过程。

    04
    领券