NHibernate in Action: write POCOs【Properies】【1】
2011-08-17 07:03
417 查看
在这里实现上两次提到的模型中的代码,依据的图是如下的图:
![](http://images.cnblogs.com/cnblogs_com/sunshinefly128/201108/201108170702311861.png)
由于作者并没有提供详细的业务类的说明,这里仅仅根据这张图构建出来相关的Model,然后在根据昨天提供的源码一步步地的细化。
说明:
1. NH要求提供默认的构造函数,这里明确一下每个类都添加这样的构造函数。
2. 不在代码中写明白每个类的其他构造函数,比如XXXClass(ParamterA, ParameterB, ParameterC);
Address ![](http://images.cnblogs.com/cnblogs_com/sunshinefly128/201108/201108170702311861.png)
由于作者并没有提供详细的业务类的说明,这里仅仅根据这张图构建出来相关的Model,然后在根据昨天提供的源码一步步地的细化。
说明:
1. NH要求提供默认的构造函数,这里明确一下每个类都添加这样的构造函数。
2. 不在代码中写明白每个类的其他构造函数,比如XXXClass(ParamterA, ParameterB, ParameterC);
[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考虑的。
相关文章推荐
- NHibernate in Action Ch3 PoCOs
- NHibernate in Action: write POCOs【Association】【2】
- NHibernate In Action CH2 Hello NHibernate
- [Study Note] NHibernate in Action 20100729
- Hello NHibernate(Chapter 2 of NHibernate in action)
- [Study Note] NHibernate In Action 20100524
- NHibernate in Action(序,前言,致谢)
- [Study Note] NHibernate In Action 20100526
- NHibernate in Action(概要)
- NHibernate in Action ch2 Hello NHibernate 读后
- Writing and Mapping classes(Chapter 3 of NHibernate In Action)
- NHibernate in Action 2.2 Understanding the architecture
- NHibernate in Action(第一章1.1)
- [Study Note] NHibernate In Action 20100521
- [Study Note] NHibernate in Action 20100522
- NHibernate in Action(第一章1.2)
- Combating the Select N + 1 Problem In NHibernate
- [mahout in action] 调通第一个例子
- 【Netty源码】read、write与accept源码剖析
- NHibernate剖析:Mapping篇之Mapping-By-Code(1):概览