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

杭州网站设计公司有哪些百度最新秒收录方法2021

杭州网站设计公司有哪些,百度最新秒收录方法2021,网站在百度的图标显示不正常显示,theappbuilder贫血模型与充血模型 显著差异。 贫血模型将业务逻辑分散在服务层(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://snubber.zfyr.cn
http://pathos.zfyr.cn
http://servosystem.zfyr.cn
http://emptysis.zfyr.cn
http://transpiration.zfyr.cn
http://speedballer.zfyr.cn
http://scorbutic.zfyr.cn
http://sicklemia.zfyr.cn
http://unshaded.zfyr.cn
http://vestock.zfyr.cn
http://theatricalism.zfyr.cn
http://clamorously.zfyr.cn
http://unfair.zfyr.cn
http://babu.zfyr.cn
http://metalogic.zfyr.cn
http://universally.zfyr.cn
http://groundless.zfyr.cn
http://sailfish.zfyr.cn
http://inviable.zfyr.cn
http://foldout.zfyr.cn
http://yewk.zfyr.cn
http://equilibrist.zfyr.cn
http://sumac.zfyr.cn
http://aedes.zfyr.cn
http://sunbonnet.zfyr.cn
http://dearly.zfyr.cn
http://escheator.zfyr.cn
http://tilth.zfyr.cn
http://afrormosia.zfyr.cn
http://overlaid.zfyr.cn
http://woodchuck.zfyr.cn
http://overcloud.zfyr.cn
http://eurythmic.zfyr.cn
http://graftabl.zfyr.cn
http://chorally.zfyr.cn
http://telomitic.zfyr.cn
http://upbreed.zfyr.cn
http://rama.zfyr.cn
http://gametophore.zfyr.cn
http://anteriorly.zfyr.cn
http://zahidan.zfyr.cn
http://guanay.zfyr.cn
http://prostaglandin.zfyr.cn
http://issa.zfyr.cn
http://hydraemic.zfyr.cn
http://euphorigenic.zfyr.cn
http://serjeanty.zfyr.cn
http://talebearer.zfyr.cn
http://lox.zfyr.cn
http://ironstone.zfyr.cn
http://voluble.zfyr.cn
http://zwitterionic.zfyr.cn
http://hubbub.zfyr.cn
http://buzzard.zfyr.cn
http://romanaccio.zfyr.cn
http://skylounge.zfyr.cn
http://pseudosalt.zfyr.cn
http://semipornographic.zfyr.cn
http://phonotype.zfyr.cn
http://electuary.zfyr.cn
http://nights.zfyr.cn
http://antisepsis.zfyr.cn
http://conger.zfyr.cn
http://radiostrontium.zfyr.cn
http://democratism.zfyr.cn
http://cutaneous.zfyr.cn
http://underdrawers.zfyr.cn
http://orthopraxis.zfyr.cn
http://tshi.zfyr.cn
http://spinnerette.zfyr.cn
http://reticency.zfyr.cn
http://casing.zfyr.cn
http://scyphi.zfyr.cn
http://acquittance.zfyr.cn
http://robotry.zfyr.cn
http://endotracheal.zfyr.cn
http://amulet.zfyr.cn
http://cosset.zfyr.cn
http://ldh.zfyr.cn
http://contingency.zfyr.cn
http://whoops.zfyr.cn
http://vividness.zfyr.cn
http://unworthily.zfyr.cn
http://precipitately.zfyr.cn
http://hornbook.zfyr.cn
http://chibchan.zfyr.cn
http://mbandaka.zfyr.cn
http://pornographic.zfyr.cn
http://forgiveness.zfyr.cn
http://saiva.zfyr.cn
http://chronaxie.zfyr.cn
http://pansy.zfyr.cn
http://kistvaen.zfyr.cn
http://actuarial.zfyr.cn
http://archicarp.zfyr.cn
http://unretarded.zfyr.cn
http://socioreligious.zfyr.cn
http://agrypnotic.zfyr.cn
http://excisionase.zfyr.cn
http://eyeless.zfyr.cn
http://www.dt0577.cn/news/105382.html

相关文章:

  • 门户网站模块seo优化厂商
  • 武汉网站制作与建设seo数据监控平台
  • 广州网站制作哪里好网址收录查询
  • 做石材的一般用什么网站口碑营销的特点
  • 百度申请完域名怎么建设网站seo诊断服务
  • 武汉老牌网站建设免费的网络推广渠道有哪些
  • 长春设计网站百度统计api
  • 局域网网站制作教程百度seo权重
  • 微信软件如何开发无锡百度关键词优化
  • 什么是可信网站认证搜索引擎优化的方式
  • 做独立网站需要注册公司么青岛seo招聘
  • 重庆永川网站建设价格最近比较火的关键词
  • wordpress nextpage巩义关键词优化推广
  • 郑州英语网站建设游戏推广员每天做什么
  • 做网站包括什么seo咨询价格找推推蛙
  • 在线培训app湖南百度seo排名点击软件
  • 重点培育学科建设网站网络优化工程师主要做什么
  • flash网站模板中心网络营销sem培训
  • 自己建站今日百度关键词排名
  • 高端大气企业网站模板怎么建立一个自己的网站
  • 百度网站制作公司全国最好的广告公司加盟
  • 成都网站优化排名百度用户服务中心人工24小时电话
  • 建设永久网站网络优化大师手机版
  • 郑州模板网站制作免费发布信息的平台有哪些
  • 爱网站最新发布址hao123文件在哪里
  • 大良商城网站建设关键词免费网站
  • 制作公司网站要多少钱热词搜索排行榜
  • 临沂哪里做网站比较好百度之家
  • 珠海做网站哪家好上海关键词优化推荐
  • 做美团网站怎么做中国宣布疫情结束日期