您的位置:首页 > 运维架构

NHibernate in Action: write POCOs【Properies】【1】

2011-08-17 07:03 417 查看
在这里实现上两次提到的模型中的代码,依据的图是如下的图:





由于作者并没有提供详细的业务类的说明,这里仅仅根据这张图构建出来相关的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考虑的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: