这应该是一个算是古老的话题了,我想在这里面重新的提一下,希望能跟园子里朋友交流交流。看园子里很多都是交流具体的技术,交流思想的倒是相对比较少,希望大家能够一起热闹热闹,给我扔砖头。
前几篇帖子只是介绍了一下我的框架。特别是对ORM是采用自己的、NHIBENATE、LINQ TO SQL等,有采用LINQ TO SQL的N个理由,也有不采用其的N个理由,其中重要的一条就是因为业务逻辑的组织。
说到业务逻辑代码的组织,也就涉及到领域模型的与代码映射的组织问题。按照Java的说法,我的第一个应用是充血型领域模型,现在的应用是贫血型领域模型,并且把很多接口全部去掉。
对于简单的基本逻辑通过基于泛形实现,并把对业务实体数据的CRUD操作放在单独Service 里,每一个Data都对应着一个Service。Data里只有基本的get/set操作和与之关联的关联、自身验证等处。


关联父对象Field#region 关联父对象Field
private DataRef<Province, ProvinceService> province;
#endregion
public City()

{
}
public City(CityEntity meta) :
base(meta)

{
}

关联父对象Property#region 关联父对象Property
public virtual Province Province

{
get

{
if (!province.IsLoad)

{
// 在此添加获取方法

province.GetRelationData += delegate(ProvinceService service)
{ return service.FindByID(this.ProvinceId); };
//
}
return province.Data;
}
set

{
province.Data = value;
}
}
#endregion

public City()

{
}
public City(CityEntity meta) :
base(meta)

{
}

映射属性#region 映射属性

/**//// <summary>
/// 城市Id
/// </summary>
[Unie2e.Common.Model.E2EKeyAttribute()]
[Unie2e.Common.Model.E2EPropertyAttribute(true, false, 0, 0, 0, "", "城市Id")]
public System.Guid CityId

{
get

{
return this.meta.CityId;
}
set

{
if ((this.meta.CityId != value))

{
this.setModify();
this.meta.CityId = value;
}
}
}

/**//// <summary>
/// 省份Id
/// </summary>
[Unie2e.Common.Model.E2EPropertyAttribute(false, false, 0, 0, 0, "", "省份Id")]
public System.Guid ProvinceId

{
get

{
return this.meta.ProvinceId;
}
set

{
if ((this.meta.ProvinceId != value))

{
this.setModify();
this.meta.ProvinceId = value;
}
}
}

/**//// <summary>
/// 城市代码
/// </summary>
[Unie2e.Common.Model.E2EPropertyAttribute(false, false, 50, 0, 0, "", "城市代码")]
public string CityCode

{
get

{
return this.meta.CityCode;
}
set

{
if ((this.meta.CityCode != value))

{
this.setModify();
this.meta.CityCode = value;
}
}
}

/**//// <summary>
/// 城市名称
/// </summary>
[Unie2e.Common.Model.E2EPropertyAttribute(false, false, 50, 0, 0, "", "城市名称")]
public string CityName

{
get

{
return this.meta.CityName;
}
set

{
if ((this.meta.CityName != value))

{
this.setModify();
this.meta.CityName = value;
}
}
}

/**//// <summary>
/// 备注
/// </summary>
[Unie2e.Common.Model.E2EPropertyAttribute(false, true, 200, 0, 0, "", "备注")]
public string CityComment

{
get

{
return this.meta.CityComment;
}
set

{
if ((this.meta.CityComment != value))

{
this.setModify();
this.meta.CityComment = value;
}
}
}
#endregion
}

每一个业务对象都有一个相关的Service与之对应
[Unie2e.Common.Model.E2EBOAttribute("City")]
public partial class CityService : CityService<City>

{
}
[Unie2e.Common.Model.E2EBOAttribute("City")]
public partial class CityService<T> : POSService<T,CityEntity> where T:E2EData<CityEntity> ,new ()

{
protected override T DataConvert(CityEntity input)

{
T t = new T();
t.Meta = input;
return t;
}

自动生成的Actionr操作#region 自动生成的Actionr操作

/**//// <summary>
/// 通过关键字删除
/// </summary>
[Unie2e.Common.Model.E2EOperation("通过关键字删除", E2ETransactionScopeOption.Required)]
public virtual int DeleteByID(Guid cityid)

{
CityActionParam cityactionparam = new CityActionParam();
cityactionparam.Method = "DeleteByID";
if ((cityid == System.Guid.Empty))

{
return 0;
}
cityactionparam.CityId = cityid;
return base.Action(cityactionparam);
}
#endregion

自动生成的查询方法#region 自动生成的查询方法

/**//// <summary>
/// 通过关键字查找
/// </summary>
[Unie2e.Common.Model.E2EOperation("通过关键字查找", E2ETransactionScopeOption.Suppress)]
public virtual T FindByID(Guid cityid)

{
if ((cityid == System.Guid.Empty))

{
return default(T);
}
CityFindParam cityfindparam = new CityFindParam();
cityfindparam.Method = "ByID";
cityfindparam.CityId = cityid;
ORMCollection<T> collection = base.Find(cityfindparam, Converter);
T returnT = default(T);
if (collection != null && collection.Count > 0)

{
return collection[0];
}
else

{
return returnT;
}
}

/**//// <summary>
/// 通过ProvinceId查找
/// </summary>
[Unie2e.Common.Model.E2EOperation("通过ProvinceId查找", E2ETransactionScopeOption.Suppress)]
public virtual Unie2e.Common.ORMCollection<T> FindByProvinceId(Guid provinceid)

{
CityFindParam cityfindparam = new CityFindParam();
cityfindparam.Method = "ByProvinceId";
if ((provinceid == System.Guid.Empty))

{
return new ORMCollection<T>();
}
cityfindparam.ProvinceId = provinceid;
return base.Find(cityfindparam, Converter);
}

/**//// <summary>
/// 查找所有数据
/// </summary>
[Unie2e.Common.Model.E2EOperation("查找所有数据", E2ETransactionScopeOption.Suppress)]
public virtual Unie2e.Common.ORMCollection<T> FindAll()

{