NHibernate in Action: write POCOs【Properies】【1】
2011-08-17 07:03 一一九九 阅读(188) 评论(0) 编辑 收藏 举报在这里实现上两次提到的模型中的代码,依据的图是如下的图:
由于作者并没有提供详细的业务类的说明,这里仅仅根据这张图构建出来相关的Model,然后在根据昨天提供的源码一步步地的细化。
说明:
1. NH要求提供默认的构造函数,这里明确一下每个类都添加这样的构造函数。
2. 不在代码中写明白每个类的其他构造函数,比如XXXClass(ParamterA, ParameterB, ParameterC);
Address
[Serializable]public class Address{public Address() { }
public string Street { get; set; }public string ZipCode { get; set; }public string City { get; set; }}
BankAccount
[Serializable]public class BankAccount: BillingDetails{public BankAccount() { }
public string BankName { get; set; }public string BankSwift { get; set; }}
说明:
- 从BillingDetails继承下来。
- 业务意义上应该是付款-银行方式。
CreditCard
[Serializable]public class CreditCard: BillingDetails{public CreditCard() { }
public int Type { get; set; }public string ExpMonth { get; set; }public string ExpYear { get; set; }}
说明:
- 从BillingDetails继承下来。
- 业务意义上应该是付款方式--信用卡方式
BillingDetails
说明[Serializable]public class BillingDetails{public BillingDetails() { }
public string Owner { get; set; }public string Number { get; set; }public DateTime Created { get; set; }}
- CredtCart和BankCount的基类
- 业务意义上是付款方式。
User
[Serializable]public class User{public string FirstName { get; set; }public string LastName { get; set; }public string UserName { get; set; }public string Email { get; set; }public int Ranking { get; set; }public DateTime Created { get; set; }public Address Address { get; set; }public IList<BillingDetails> BillDetails { get; set; }}
说明:
1。 聚合了一个Address类,所以不是集合形式的。
2. 有一个或者多个BillDetiails, 所以是IList形式的。
Category
[Serializable]public class Category{public string Name { get; set; }public Category Parent { get; set; }public IList<Category> ChildCategories { get; set; }}
说明:
1. 由于是自我聚合的,所以存在一个指向父的Parent属性。存在一个指向自己的ChildCategories的属性,指自己所包含的所有的子。
Comment
[Serializable]public class Comment{public int Rating { get; set; }public string Text { get; set; }public DateTime Created { get; set; }public User User { get; set; }public Item Item { get; set; }}
说明:
1。Comment是属于某个User或者Item的,和这两个的关系是零对多的关系。这里临时拉过来,其实这地方的关系是比较难搞的。
Bid
[Serializable]public class Bid{public double AMount { get; set; }public DateTime Created { get; set; }public User Bider { get; set; }public Item Item { get; set; }}
说明:
1. 代表了最终竞拍的价格和标的。
2. 和User, Item的关系都是零对多的关系,这里临时拉过来这两个对象。
Item
[Serializable]public class Item{public string Name { get; set; }public string Description { get; set; }public double InitialPrice { get; set; }public double ReservePrice { get; set; }public DateTime StartDatetime { get; set; }public DateTime EndDatetime { get; set; }public DateTime Created { get; set; }public User Seller { get; set; }public IList<Category> Categories { get; set; }public IList<Comment> Comments { get; set; }public IList<Bid> Bids { get; set; }}
说明:
1. 是一个User买的,所有增加了一个Seller的属性。
2. 属于零个或者多个Category, 拥有多个Comments或者Bids所有加入了三个List的属性。
总结一下:这一部分根据关系图简单的拉过来了所有的属性和一部分的关系,但是没有对关系进行详细的处理,比如说是建立单向的关系还是双向的关系,都存在问题。例如Item和Bid存在一个Successful的关系,此时可以考虑在Item中增加一个属性SuccessfulBid或者在Bid中增加一个属性Successed都是可以的,那么在哪里添加呢? 感觉写下来后关系还是比较难处理的。
另外这里没有在每个类中添加ID属性,这是单纯的从Domain Model考虑的。