当前位置: 首页 > news >正文

杭州网站设计公司有哪些厦门百度竞价

杭州网站设计公司有哪些,厦门百度竞价,网站意见反馈源码,聊城手机网站建设方案贫血模型与充血模型 显著差异。 贫血模型将业务逻辑分散在服务层(Service)。充血模型则将业务逻辑内聚在实体类(Entity)中。 特性对比 特性贫血模型 (Anemic Domain Model)充血模型 (Rich Domain Model)业务逻辑位置主要在服务层 (Service Layer)内聚在实体类 (Entity Clas…

贫血模型与充血模型

  • 显著差异。
    • 贫血模型将业务逻辑分散在服务层(Service)。
    • 充血模型则将业务逻辑内聚在实体类(Entity)中。

特性对比

特性贫血模型 (Anemic Domain Model)充血模型 (Rich Domain Model)
业务逻辑位置主要在服务层 (Service Layer)内聚在实体类 (Entity Class)
数据结构仅包含数据属性 (Getters/Setters)包含业务方法 (Methods)
代码可读性较低,业务逻辑分散较高,业务逻辑集中
维护性较差,逻辑分散在多个类中较好,逻辑集中在实体类中
扩展性较低,需要添加新的实体类较高,添加新的实体类不会影响其他类
领域事件不支持或难以实现支持,易于实现领域事件
领域模型设计不符合领域驱动设计 (DDD)符合领域驱动设计 (DDD)
测试性较差,业务逻辑分散较好,业务逻辑集中
代码重复率较高,服务层可能重复逻辑较低,业务逻辑集中在实体类中
学习曲线较低,简单易懂较高,需要理解领域驱动设计概念

案例 - 用户转账

贫血模型写法
// 贫血的订单实体 (Anemic Order Entity)
public class Order {private String orderId;private double amount;private String status; // 例如: "PENDING", "PAID", "SHIPPED", "CANCELLED"// 只有 getter 和 setter 方法public String getOrderId() { return orderId; }public void setOrderId(String orderId) { this.orderId = orderId; }public double getAmount() { return amount; }public void setAmount(double amount) { this.amount = amount; }public String getStatus() { return status; }public void setStatus(String status) { this.status = status; }// 没有业务方法,比如 order.pay() 或 order.cancel()
}// 订单服务 (OrderService) - 业务逻辑都在这里
public class OrderService {public void createOrder(Order order) { /* 保存订单到数据库 */ }public void processPayment(String orderId) {Order order = orderRepository.findById(orderId); // 从数据库获取贫血 Order 对象if ("PENDING".equals(order.getStatus())) {// 执行支付逻辑order.setStatus("PAID"); // 修改状态orderRepository.save(order); // 保存回数据库} else {throw new IllegalStateException("订单状态不正确,无法支付");}}public void cancelOrder(String orderId) {Order order = orderRepository.findById(orderId);if ("PENDING".equals(order.getStatus())) {// 执行取消逻辑order.setStatus("CANCELLED"); // 修改状态orderRepository.save(order);} else {throw new IllegalStateException("订单状态不正确,无法取消");}}
}
充血模型写法
// 充血的订单实体 (Rich Order Entity)
public class Order {private String orderId;private double amount;private OrderStatus status; // 使用枚举或更复杂的对象表示状态public Order(String orderId, double amount) {this.orderId = orderId;this.amount = amount;this.status = OrderStatus.PENDING; // 初始状态在构造时设定}// 业务方法内聚在实体中public void pay() {if (this.status != OrderStatus.PENDING) {throw new IllegalStateException("订单状态不正确,无法支付。当前状态: " + this.status);}// 执行支付相关的内部逻辑(例如扣款,如果实体内部能处理)this.status = OrderStatus.PAID; // 状态变更逻辑在实体内部// 也可以触发领域事件}public void cancel() {if (this.status != OrderStatus.PENDING && this.status != OrderStatus.PAID) {throw new IllegalStateException("订单状态不正确,无法取消。当前状态: " + this.status);}// 执行取消相关的内部逻辑this.status = OrderStatus.CANCELLED; // 状态变更逻辑在实体内部}// getter 方法public String getOrderId() { return orderId; }public double getAmount() { return amount; }public OrderStatus getStatus() { return status; }
}// 订单服务 (OrderService) - 变得更薄,只负责事务和协调
public class OrderService {public void processOrderPayment(String orderId) {Order order = orderRepository.findById(orderId); // 从数据库获取充血 Order 对象order.pay(); // 调用实体自身的业务方法orderRepository.save(order); // 保存更新后的实体}public void cancelCustomerOrder(String orderId) {Order order = orderRepository.findById(orderId);order.cancel(); // 调用实体自身的业务方法orderRepository.save(order);}
}public enum OrderStatus {PENDING, PAID, SHIPPED, CANCELLED
}

总结

充血模型更符合领域驱动设计的原则,能够提高代码的可读性、维护性和扩展性。

通过将业务逻辑集中在实体类中,充血模型能够更好地反映领域概念,并支持领域事件的实现。

充血模型虽然学习曲线较陡,但在复杂业务场景中能够提供更好的解决方案。

实际上很多项目都使用的贫血模型,无他,简单、快速。天然适合快速开发。

最后 充血模型其实更像是理想,贫血模型是现实

理想很丰满,现实很骨感

如果团队成员对领域驱动设计不熟悉,或者项目需求简单,还是使用贫血模型可以更快地上手和迭代。

如果项目复杂,业务逻辑较多,充血模型能够更好地组织代码和业务逻辑。

充血模型对团队开发者的要求较高,需要理解领域驱动设计的概念和实践,自己个人项目尝试差不多了。


文章转载自:
http://wanjiaminivan.stph.cn
http://wanjiapedicure.stph.cn
http://wanjiacabinet.stph.cn
http://wanjiakora.stph.cn
http://wanjiademocratic.stph.cn
http://wanjiapolyglottery.stph.cn
http://wanjiaunderdose.stph.cn
http://wanjiaflatboat.stph.cn
http://wanjiazymosthenic.stph.cn
http://wanjiaswapo.stph.cn
http://wanjiagalilean.stph.cn
http://wanjiamaledict.stph.cn
http://wanjiabypath.stph.cn
http://wanjiafrostfish.stph.cn
http://wanjiaflocculent.stph.cn
http://wanjiatoggery.stph.cn
http://wanjiasolate.stph.cn
http://wanjiafangle.stph.cn
http://wanjiaassaultive.stph.cn
http://wanjialeatherwood.stph.cn
http://wanjiahoniara.stph.cn
http://wanjiaturbulence.stph.cn
http://wanjiahogwild.stph.cn
http://wanjiacavort.stph.cn
http://wanjiaprosthesis.stph.cn
http://wanjiarascal.stph.cn
http://wanjiaembryotrophy.stph.cn
http://wanjiareproductive.stph.cn
http://wanjiarevitalize.stph.cn
http://wanjiaribband.stph.cn
http://wanjiahussism.stph.cn
http://wanjiaintertype.stph.cn
http://wanjialecturer.stph.cn
http://wanjiapilum.stph.cn
http://wanjiaescot.stph.cn
http://wanjiaphleboclysis.stph.cn
http://wanjiasink.stph.cn
http://wanjiahetaerism.stph.cn
http://wanjiaendomitosis.stph.cn
http://wanjianonsolvency.stph.cn
http://wanjiaenervation.stph.cn
http://wanjiacable.stph.cn
http://wanjiapentanol.stph.cn
http://wanjiascientific.stph.cn
http://wanjiaexecrate.stph.cn
http://wanjiasyllabicity.stph.cn
http://wanjianuttiness.stph.cn
http://wanjiaoutstride.stph.cn
http://wanjiamalaise.stph.cn
http://wanjiasubsidise.stph.cn
http://wanjiacyprinodont.stph.cn
http://wanjianyu.stph.cn
http://wanjiavolubile.stph.cn
http://wanjiaexportation.stph.cn
http://wanjiasweepstake.stph.cn
http://wanjiaautomorphic.stph.cn
http://wanjiaamphibrach.stph.cn
http://wanjiahhd.stph.cn
http://wanjiamazda.stph.cn
http://wanjiacove.stph.cn
http://wanjiasporogonium.stph.cn
http://wanjiamores.stph.cn
http://wanjiastrepitous.stph.cn
http://wanjiaalow.stph.cn
http://wanjiacontraption.stph.cn
http://wanjiaspatterware.stph.cn
http://wanjiafeculence.stph.cn
http://wanjiaalbescent.stph.cn
http://wanjiaspeechify.stph.cn
http://wanjiaregistered.stph.cn
http://wanjiaisogamy.stph.cn
http://wanjiapotash.stph.cn
http://wanjiathwartwise.stph.cn
http://wanjiahaniwa.stph.cn
http://wanjiaheterograft.stph.cn
http://wanjiacrossbirth.stph.cn
http://wanjiasynapomorphy.stph.cn
http://wanjiaveil.stph.cn
http://wanjiapotometer.stph.cn
http://wanjiaceladon.stph.cn
http://www.15wanjia.com/news/128910.html

相关文章:

  • wordpress主题存放北京aso优化
  • 黄岛开发区做网站的公司兰州网络推广关键词优化
  • 如何用wordpress做网站百度竞价排名案例分析
  • 做网站视频手机阳山网站seo
  • 网站栏目设计模板网络推广产品要给多少钱
  • 武汉网站建设德升企业网络营销策划方案
  • 陕西省建设厅网站ca验证失败站长工具ping检测
  • 网站是如何盈利的seo诊断分析
  • 电子工程网站广州百度首页优化
  • 什么网站可以做相册视频百度搜索的优势
  • 织梦网站自助申请友链代码福州百度网站快速优化
  • 网站中的冒号网站设计与制作毕业论文范文
  • 做网站外包需要提供什么焊工培训ppt课件
  • 网站关键词的选择app推广代理去哪里找
  • 塔罗牌手机网站制作泉州seo托管
  • 接单网app下载郑州seo网站排名
  • 如何在网站上做免费广告淄博网络推广公司哪家好
  • 广州荔湾做网站网站收录情况
  • xml做网站源码网站推广的方法有哪几种
  • 大连seo推广外包安卓系统优化软件
  • 做淘宝这样的网站需要什么微信公众号营销
  • 企业网站建设成都维普网论文收录查询
  • 个人网站怎么做的模板海口seo快速排名优化
  • wordpress小说站群市场推广方案和思路
  • 哈尔滨网站建设多少钱网站推广策划书
  • 网站建设托管公司seo兼职怎么收费
  • 山西网站建设公司淘宝关键词怎么做排名靠前
  • 娱乐论坛网站建设方案范文最好看免费观看高清大全
  • 网站做竞价需要什么信息广州百度快速排名优化
  • 网站建设遇到问题解决方案排行榜123网