
最近面向领域的知识挺火我也来插一腿。说说我平时做项目时候用到的开发方式以下代码为伪代码主要展示一下我现在的开发方式供大家讨论系统中不考虑持久、UI、AOP和IOC等方面内容。说到.NET社区的“开发方式”就不得不提一下Petshop了可以说Petshop真是影响了.NET的一代人。以至于三层成了.NET这边流行的标准的开发方式。但是要说一下Petshop是数据库驱动业务核心的过程式开发也正是它也毒害了一批人。下面我们以一个最常见也是大家比较熟的下定单来简单看一下。首先是系统的几个领域类应牧章的要求加上类之间的关系这里的关系很简单Order与OrderItem是一对多关系OrderItem与Product是一对多关系定单提交业务Order对象是个“根”我也就不解释了发下几个类的代码里面有注解。大家看一下就明白了。这里我们要强调的是类关系还有一个根的概念。每个业务流都会有一个根。而根不是整个系统唯一确定的是而是根据对象在哪个业务范围内而决定的。显然这里面是Order定单对象。/// summary/// 商品/// /summarypublic class Product{/// summary/// 键/// /summarypublic int SysNo { get; set; }/// summary/// 商品名称/// /summarypublic string ProductName { get; set; }/// summary/// 商品价格/// /summarypublic decimal ProductPrice { get; set; }private Category _category;/// summary/// 所属分类/// /summarypublic Category Category{get { return _category; }set { _category value; }}}/// summary/// 定单/// /summarypublic class Order{#region 属性/// summary/// 键/// /summarypublic int SysNo { get; set; }/// summary/// 定单ID/// /summarypublic string OrderId { get; set; }/// summary/// 定单金额/// /summarypublic decimal OrderAmount { get; set; }/// summary/// 运费金额/// /summarypublic decimal ShipAmount { get; set; }/// summary/// 支付金额/// /summarypublic decimal PayAmount { get; set; }/// summary/// 定单状态/// /summarypublic int OrderStatus { get; set; }/// summary/// 定单时间/// /summarypublic DateTime OrderTime { get; set; }private ListOrderItem _orderItems new ListOrderItem();/// summary/// 定单明细/// /summarypublic ListOrderItem OrderItems{get { return _orderItems; }set { _orderItems value; }}#endregion#region 方法/// summary/// 计算定单金额/// /summary/// returns/returnspublic decimal GetOrderAmount(){decimal amount 0;//计算商品金额foreach (var item in OrderItems){amount item.GetAmount();}//加上运费amount ShipAmount;return amount;}#endregion}/// summary/// 定单明细/// /summarypublic class OrderItem{#region 属性/// summary/// 键/// /summarypublic int SysNo { get; set; }private Product _product new Product();/// summary/// 购买商品/// /summarypublic Product Product{get { return _product; }set { _product value; }}/// summary/// 购买价格/// /summarypublic decimal ProductPrice { get; set; }/// summary/// 购买数量/// /summarypublic int ProductQty { get; set; }#endregion#region 方法/// summary/// 主算小计金额/// /summary/// returns/returnspublic decimal GetAmount(){return this.ProductPrice * Convert.ToDecimal(this.ProductQty);}#endregion}/// summary/// 商品库存/// /summarypublic class Inventory{#region 属性/// summary/// 键/// /summarypublic int SysNo { get; set; }/// summary/// 更新键用来保证更新的数据之前没有别人更新过。对应表的ModKey列,每更新一次更新Guid值/// /summarypublic Guid ModKey { get; set; }private Product _product new Product();/// summary/// 商品/// /summarypublic Product Product{get { return _product; }set { _product value; }}/// summary/// 库存数量/// /summarypublic int Qty { get; set; }#endregion#region 方法/// summary/// 验证库存是否有库存/// /summary/// returns/returnspublic bool ValidInventory(){if (this.Qty 0)return true;elsereturn false;}/// summary/// 减库存/// /summary/// param nameqty/parampublic void MinusInventory(int qty){if (this.Qty qty)throw new Exception(库存不足);this.Qty - qty;}#endregion}