框架从层次结构上分主要分为:ORM层、Meta层、BO层、SO层、数据交换层、DTO层、服务层、代理层、外观层,这几大层。
ORM层:主要提供,存储过程、配置文件的翻译,实现数据库与实体数据的映射。由框架提供。
Meta层:主要提供,数据库与对象的映射,由工具生成,在98%的应用场合不用更改
BO层:业务逻辑层,核心的业务逻辑,基本关联已经由工具生成,可以在此层处理特定业务逻辑,如果涉及分布式数据访问,需要在此进行稍加改动。对于关联结构、主从结构要在此加上关联处理,重写OnBeforeAdded/onAfterAdded/等。加入特定业务。建议通用查询/配置过程的处理,在这里重写一下,不要以ActionId对外开放。(在Demo里面没有给出通用查询/配置过程的处理,类似于Ibatis的配置文件)
SO层:业务外观层,主要是与客户端打交道,提供客户端所需要的数据。SO层与DTO和数据交换相互配合,传输客户端需要的数据。提供声明性事务、声明性服务。工具根据BO业务层生成SO层代码。
数据交换层:实现DTO层与BO层的数据交换,实现客户端的数据与业务数据的连接。工具生成基本代码。
服务层:根据BO生成的配置文件,提供基于Http信道的服务。(可以提供TCPIP等其他信道)主要服务主框架提供,需要在此配置基本连接字符串,设置配置文件的路径等。
代理层:由工具生成,配置文件根据服务生成。
外观层:当前只提供CS的界面生成,BS界面下一步加入。主要提供了列表的配置、列表界面、明细界面的生成,对于主从、关联结构的自动触发机制。客户端生成代码的质量非常高,基本应用的改动很小。
下面把每一部分的代码一一介绍
namespace Unie2e.Yuking.Enities
{
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using Unie2e.Common;
using Unie2e.ORM;
using Unie2e.ORM.Mapping;
[System.SerializableAttribute()]
[Unie2e.ORM.Mapping.TableAttribute("DO", MapFileName="DOCustParam.Xml")]
public sealed class DOEntity : Unie2e.ORM.Mapping.Entity
{
/**//// <summary>
/// 映射字段的总长度
/// </summary>
private const int length = 5;
映射字段#region 映射字段
/**//// <summary>
/// 送货单Id
/// </summary>
[Unie2e.ORM.Mapping.FieldAttribute("DO", "DOId", true, SqlDbType.UniqueIdentifier, 0, 0, 0, "送货单Id")]
public Guid DOId = System.Guid.NewGuid();
/**//// <summary>
/// 客户Id
/// </summary>
[Unie2e.ORM.Mapping.FieldAttribute("DO", "CustomerId", false, SqlDbType.UniqueIdentifier, 0, 0, 0, "客户Id")]
public Guid CustomerId = System.Guid.Empty;
/**//// <summary>
/// 送货单号
/// </summary>
[Unie2e.ORM.Mapping.FieldAttribute("DO", "DONumber", false, SqlDbType.VarChar, 128, 0, 0, "送货单号")]
public String DONumber;
/**//// <summary>
/// 送货单状态
/// </summary>
[Unie2e.ORM.Mapping.FieldAttribute("DO", "DOStatus", false, SqlDbType.Int, 0, 10, 0, "送货单状态")]
public Int32 DOStatus = 0;
/**//// <summary>
/// 备注
/// </summary>
[Unie2e.ORM.Mapping.FieldAttribute("DO", "DOComment", false, SqlDbType.VarChar, 512, 0, 0, "备注")]
public String DOComment;
#endregion
重载基类函数#region 重载基类函数
public override void Initialize(object[] parameters)
{
if ((length != parameters.Length))
{
throw new E2EException("参数个数与字段数不相等");
}
DOId = ((System.Guid)(parameters[0]));
CustomerId = ((System.Guid)(parameters[1]));
DONumber = ((string)(parameters[2]));
DOStatus = ((int)(parameters[3]));
DOComment = ((string)(parameters[4]));
}
public override object[] ToArray()
{
object[] objs = new object[5];
objs[0] = DOId;
objs[1] = CustomerId;
objs[2] = DONumber;
objs[3] = DOStatus;
objs[4] = DOComment;
return objs;
}
#endregion
}
[System.SerializableAttribute()]
[Unie2e.ORM.Mapping.TableAttribute("DO")]
public abstract class DOFindParam<T> : EntityParam<T> where T: IEntity
{
/**//// <summary>
/// 映射字段的总长度
/// </summary>
private const int length = 6;
映射字段#region 映射字段
[Unie2e.ORM.Mapping.FieldAttribute("DO", "Method", SqlDbType.VarChar, 50, 0, 0, "")]
public String Method;
[Unie2e.ORM.Mapping.FieldAttribute("DO", "DOId", SqlDbType.UniqueIdentifier, 0, 0, 0, "")]
public Guid DOId = System.Guid.Empty;
[Unie2e.ORM.Mapping.FieldAttribute("DO", "CustomerId", SqlDbType.UniqueIdentifier, 0, 0, 0, "")]
public Guid CustomerId = System.Guid.Empty;
[Unie2e.ORM.Mapping.FieldAttribute("DO", "DONumber", SqlDbType.VarChar, 128, 0, 0, "")]
public String DONumber;
[Unie2e.ORM.Mapping.FieldAttribute("DO", "DOStatus", SqlDbType.Int, 0, 10, 0, "")]
public Int32 DOStatus = 0;
[Unie2e.ORM.Mapping.FieldAttribute("DO", "DOComment", SqlDbType.VarChar, 512, 0, 0, "")]
public String DOComment;
#endregion
重载基类函数#region 重载基类函数
public override object[] ToArray()
{
object[] objs = new object[6];
objs[0] = Method;
objs[1] = DOId;
objs[2] = CustomerId;
objs[3] = DONumber;
objs[4] = DOStatus;
objs[5] = DOComment;
return objs;
}
public override void Initialize(object[] parameters)
{
if ((length != parameters.Length))
{
throw new E2EException("参数个数与字段数不相等");
}
Method = ((String)(parameters[0]));
DOId = ((Guid)(parameters[1]));
CustomerId = ((Guid)(parameters[2]));
DONumber = ((String)(parameters[3]));
DOStatus = ((Int32)(parameters[4]));
DOComment = ((String)(parameters[5]));
}
#endregion
}
[System.SerializableAttribute()]
[Unie2e.ORM.Mapping.TableAttribute("DO")]
public sealed class DOFindParam : DOFindParam<DOEntity>
{
}
[System.SerializableAttribute()]
[Unie2e.ORM.Mapping.TableAttribute("DO")]
public abstract class DOActionParam<T> : EntityParam<T> where T: IEntity
{
/**//// <summary>
/// 映射字段的总长度
/// </summary>
private const int length = 2;
映射字段#region 映射字段
[Unie2e.ORM.Mapping.FieldAttribute("DO", "Method", SqlDbType.VarChar, 50, 0, 0, "")]
public String Method;
[Unie2e.ORM.Mapping.FieldAttribute("DO", "DOId", SqlDbType.UniqueIdentifier, 0, 0, 0, "")]
public Guid DOId = System.Guid.Empty;
#endregion
重载基类函数#region 重载基类函数
public override object[] ToArray()
{
object[] objs = new object[2];
objs[0] = Method;
objs[1] = DOId;
return objs;
}
public override void Initialize(object[] parameters)
{
if ((length != parameters.Length))
{
throw new E2EException("参数个数与字段数不相等");
}
Method = ((String)(parameters[0]));
DOId = ((Guid)(parameters[1]));
}
#endregion
}
[System.SerializableAttribute()]
[Unie2e.ORM.Mapping.TableAttribute("DO")]
public sealed class DOActionParam : DOActionParam<DOEntity>
{
}
}
namespace
Unie2e.Yuking.Data
{
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using Unie2e.Common;
using Unie2e.ORM;
using Unie2e.ORM.Mapping;
using Unie2e.Service;
using Unie2e.Yuking.Enities;
using Unie2e.Yuking.Service;
using Unie2e.Yuking.Common;
public class DO<T> : E2EData<T,DOEntity> where T:DO<T>,new ()
{
public DO()
{
}
public DO(DOEntity meta) :
base(meta)
{
}
映射属性#region 映射属性
/**//// <summary>
/// 送货单Id
/// </summary>
[Unie2e.Common.Model.E2EKeyAttribute()]
[Unie2e.Common.Model.E2EPropertyAttribute(true, false, 0, 0, 0, "", "送货单Id")]
public System.Guid DOId
{
get
{
return this.meta.DOId;
}
set
{
if ((this.meta.DOId != value))
{
this.setModify();
this.meta.DOId = value;
}
}
}
/**//// <summary>
/// 客户Id
/// </summary>
[Unie2e.Common.Model.E2EPropertyAttribute(false, false, 0, 0, 0, "", "客户Id")]
public System.Guid CustomerId
{
get
{
return this.meta.CustomerId;
}
set
{
if ((this.meta.CustomerId != value))
{
this.setModify();
this.meta.CustomerId = value;
}
}
}
/**//// <summary>
/// 送货单号
/// </summary>
[Unie2e.Common.Model.E2EPropertyAttribute(false, false, 128, 0, 0, "", "送货单号")]
public string DONumber
{
get
{
return this.meta.DONumber;
}
set
{
if ((this.meta.DONumber != value))
{
this.setModify();
this.meta.DONumber = value;
}
}
}
/**//// <summary>
/// 送货单状态
/// </summary>
[Unie2e.Common.Model.E2EPropertyAttribute(false, false, 0, 10, 0, "", "送货单状态")]
public ActiveStatus DOStatus
{
get
{
return (ActiveStatus)this.meta.DOStatus;
}
set
{
if ((this.meta.DOStatus != (int)value))
{
this.setModify();
this.meta.DOStatus = (int)value;
}
}
}
/**//// <summary>
/// 备注
/// </summary>
[Unie2e.Common.Model.E2EPropertyAttribute(false, true, 512, 0, 0, "", "备注")]
public string DOComment
{
get
{
return this.meta.DOComment;
}
set
{
if ((this.meta.DOComment != value))
{
this.setModify();
this.meta.DOComment = value;
}
}
}
#endregion
创建函数#region 创建函数
public new static T CreateNew()
{
T t = E2EData<T,DOEntity>.CreateNew();
t.DOId = Guid.NewGuid();
return t;
}
#endregion
}
[Unie2e.Common.Model.E2EDataAttribute("DOService")]
public class DO : DO<DO>
{
关联子集合Field#region 关联子集合Field
private DataRef<ORMCollection<DOItem>, DOItemService> dOItem;
#endregion
关联父对象Field#region 关联父对象Field
private DataRef<Customer, CustomerService> customer;
#endregion
public DO()
{
}
public DO(DOEntity meta) :
base(meta)
{
}
关联子集合Property#region 关联子集合Property
public virtual ORMCollection<DOItem> DOItemCollection
{
get
{
if (!dOItem.IsLoad)
{
// 在此添加获取方法
dOItem.GetRelationData += delegate(DOItemService service) { return service.FindByDOId(this.DOId); };
//
}
return dOItem.Data;
}
set
{
dOItem.Data = value;
}
}
#endregion
关联父对象Property#region 关联父对象Property
public virtual Customer Customer
{
get
{
if (!customer.IsLoad)
{
// 在此添加获取方法
customer.GetRelationData += delegate(CustomerService service) { return service.FindByID(this.CustomerId); };
//
}
return customer.Data;
}
set
{
customer.Data = value;
}
}
#endregion
}
}