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

安徽省建设厅网站人员管理网页设计实训报告

安徽省建设厅网站人员管理,网页设计实训报告,怎么做网站子页,东莞市网络优化推广平台文章目录 工程结构概览:定义应用分层及依赖关系1.应用分层2.定义Entity3.仓储层3.1 工作单元:事务管理3.2 仓储层 4.领域事件5.APIController最佳实践 工程结构概览:定义应用分层及依赖关系 1.应用分层 领域模型层基础设施层 ⇒ 仓储应用层 ⇒ Api、后台任务Job共…

文章目录

  • 工程结构概览:定义应用分层及依赖关系
    • 1.应用分层
    • 2.定义Entity
    • 3.仓储层
      • 3.1 工作单元:事务管理
      • 3.2 仓储层
    • 4.领域事件
    • 5.APIController最佳实践

工程结构概览:定义应用分层及依赖关系

1.应用分层

  • 领域模型层
  • 基础设施层 ⇒ 仓储
  • 应用层 ⇒ Api、后台任务Job
  • 共享层

总结

  • 领域模型专注业务的设计,不依赖仓储等基础设施层
  • 基础设施的仓储层仅负责领域模型的取出和存储
  • 使用CQRS模式设计应用层
  • Web Api是面向前端的交互的接口,避免依赖领域模型
  • 将共享代码设计为共享包,使用私有Nuget仓库分发管理

2.定义Entity

要点总结

  • 将领域模型字段的修改设置为私有
  • 使用构造函数表示对象的创建
  • 使用具有业务含义的动作来操作模型字段
  • 领域模型负责对自己数据的处理
  • 领域服务或命令处理者负责调用领域模型业务动作

3.仓储层

3.1 工作单元:事务管理

仓储层最重要的就是事务的管理,这里通过工作单元模式实现事务管理

工作单元特性

  • 使用同一上下文
  • 跟踪实体的状态
  • 保障事务一致性

3.2 仓储层

仓储层接口TEntity必须继承Entity,并且必须实现聚合根,也就是仓储中储存的对象是一个聚合根对象,

public interface IRepository<TEntity>  where TEntity : Entity,IAggregateRoot
{IUnitOfWork UnitOfWork {get;}TEntity Add(TEntity entity);TEntity Update(TEntity entity);
}public interface IRepository<TEntity,TKey>:IRepository<TEntity> where TEntity : Entity<TKey>,IAggregateRoot
{bool Delete(TKey id);TEntity Get(TKey id);
}

4.领域事件

  • 领域事件的构造和添加都应该在领域模型的方法内完成,不应该被外界的代码调用创建,因为这些事件都是领域模型内部发生的
  • 接受领域事件的处理应该定义在应用层
  • 创建完领域模型并保存之后,领域事件的处理程序才触发

总结

1.由领域模型内部创建事件
2.由专有的领域事件处理类处理领域事件
3.根据实际情况来决定是否在同一事务中处理(如一致性、性能等因素)

5.APIController最佳实践

// 伪代码[HttpGet]
public Task<long> CreateOrder([FromBody]CreateOrderViewModel viewModel)
{var model = viewModel.ToModel();// 模型转换return await orderService.CreateOrder(model);// 业务代码调用
}// 服务中代码
class OrderService : IOrderService
{public long CreateOrder(CreateOrderMode model){var address = new Address("测试路","测试市区","123");var order = new Order("订单名称","客户名称",999,address);_orderRepository.Add(order);await _orderRepository.UnitOfWork.SaveEntitiesAsync(cancellationToken);return order.Id;}
}

上述代码,随着业务逻辑的复杂化,Controller就会越来越膨胀。而DD领域设计的理念中,更新倾向于把应用程序的每一层明确区分,层与层之间的界限应该是明确的,同时在实现上应该也是隔离的。因此控制器不应该负责处理领域模型,处理仓储这些动作,Controller应该负责与前端交互,主要责任应该是定义输入和输出,实现身份认证、授权等功能。因此上述代码不建议使用

推荐使用中间者模式,演示代码如下

// 这里不建议使用属性服务进行服务注册,因为当使用属性注入的时候,需要把属性设置为public,并且开放set,get方法,可能出现意外情况,这可能导致代码的维护不可控
IMediator _mediator;
public OrderController(IMediator mediator)
{_mediator = mediator;
}// 这里尽可能的定义异步的action,可以帮助提高应用程序的吞吐量
[HttpPost]
public async Task<long> CreateOrder([FromBody] CreateOrderCommans cmd)
{return await _mediator.Send(cmd,HttpContext.RequestAborted);
}

总结

  • 负责用户的输入输出定义
  • 负责身份认证和授权
  • 与领域服务职责区分开,不承载业务逻辑
http://www.yayakq.cn/news/840956/

相关文章:

  • 自助建站系统网页制作的公司成都
  • 教做flash的网站青岛住房和城乡建设部网站
  • 网站做系统前程无忧网深圳网站建设类岗位
  • 怎么用手机做刷赞网站重庆建设集团网站首页
  • 网站建设背景是什么国外购物网站平台有哪些
  • 网站 毕业设计代做WordPress怎么自动发文章
  • 做织梦网站时图片路径显示错误专业制作网站 上海
  • 用书籍上的文章做网站更新worldpress英文网站建设
  • 网站开发哪一门语言更快企查查app下载安装
  • dtu网站开发商服网站模板
  • 哪有做网站公司去生活服务性的网站做php好吗
  • 湖南中维电力建设有限公司网站网站建设平台报价
  • 外贸网站建设注意事项杨凌做网站的
  • 个人如何做网站推广聊城手机网站服务
  • 淘宝网站开发方式专业做标书
  • 用nodejs做的网站网站优化的
  • 校园网站建设必要性学物联网工程后悔死了
  • 宁波网站建设caiyiduo公司网站开发怎么做
  • 影院网站如何做度娘网站灯笼要咋做呢
  • 做视频网站适合用什么服务器wordpress 评论管理
  • asp源码下载网站建设厅官网查询
  • 营销网站建设实训总结自己怎样做优惠券网站
  • 广西seo网站推广wordpress 最新文章调用
  • 平板购物网站建设网站的必要性
  • 网站多长时间到期中山网站建设中山
  • 中牟建设工程信息网站郑州企业网站优化公司
  • 金桥网站建设出名的设计网站
  • 企业进行网站建设的方式有哪些做农药的网站
  • 做企业网站哪家公司专业虚拟机中做网站
  • 通信管理局网站 备案icp查询官网