代码看的多,却写的不够,每次写的时候都会发现些傻傻的问题,就像这个一样。
为了面向对象,那么增加这么一个账单条目的对象到底意义多大?
感觉这样写确实是对的 只不过对‘对象’这个词的定义到底是什么
一开始就是直接把字段全部放在了账单里,但结果发现创建账单的时候要写很多东西进来
就像这样子:
public void AddMainBill(Customer customer, User user, Project project)
于是又重新写了一个条目对象
然后才变成了这样子:
public void AddMainBill(BillItem item)
其实疑惑的地方就是还是一样写了这么多代码,甚至还多创建了一个对象,那直接传项目,用户,客户这些对象不也是对象吗?
到底传什么样的对象才算是‘好对象’呢?一开始比较傻的:public class MainBill : Entity<MainBill>
{
public virtual string RunninNumber { get; set; } public virtual string CustomerName { get; set; } public virtual string Payee { get; set; } public virtual string ProjectName { get; set; } public virtual decimal ProjectPrice { get; set; } public void AddMainbill(Project project,User user,Customer customer)
{
CustomerName = customer.Name;
Payee = user.Name;
ProjectName = project.Name;
ProjectPrice = project.Price;
} }
之后改进了一点:
public class MainBill : Entity<MainBill>
{
public MainBill()
{
BillItems = new List<BillItem>();
} /// <summary>
/// 流水号
/// </summary>
public virtual string RunninNumber { get; set; } public virtual BillItem BillItem { get; set; } public virtual IList<BillItem> BillItems { get; set; }
public void AddMainBill(BillItem item)
{
BillItems.Add(item);
AddBillItem();
} public void AddBillItem()
{
foreach (var item in BillItems)
{
BillItem = item;
}
}
}代码写的比较丑,不好意思了。。
为了面向对象,那么增加这么一个账单条目的对象到底意义多大?
感觉这样写确实是对的 只不过对‘对象’这个词的定义到底是什么
一开始就是直接把字段全部放在了账单里,但结果发现创建账单的时候要写很多东西进来
就像这样子:
public void AddMainBill(Customer customer, User user, Project project)
于是又重新写了一个条目对象
然后才变成了这样子:
public void AddMainBill(BillItem item)
其实疑惑的地方就是还是一样写了这么多代码,甚至还多创建了一个对象,那直接传项目,用户,客户这些对象不也是对象吗?
到底传什么样的对象才算是‘好对象’呢?一开始比较傻的:public class MainBill : Entity<MainBill>
{
public virtual string RunninNumber { get; set; } public virtual string CustomerName { get; set; } public virtual string Payee { get; set; } public virtual string ProjectName { get; set; } public virtual decimal ProjectPrice { get; set; } public void AddMainbill(Project project,User user,Customer customer)
{
CustomerName = customer.Name;
Payee = user.Name;
ProjectName = project.Name;
ProjectPrice = project.Price;
} }
之后改进了一点:
public class MainBill : Entity<MainBill>
{
public MainBill()
{
BillItems = new List<BillItem>();
} /// <summary>
/// 流水号
/// </summary>
public virtual string RunninNumber { get; set; } public virtual BillItem BillItem { get; set; } public virtual IList<BillItem> BillItems { get; set; }
public void AddMainBill(BillItem item)
{
BillItems.Add(item);
AddBillItem();
} public void AddBillItem()
{
foreach (var item in BillItems)
{
BillItem = item;
}
}
}代码写的比较丑,不好意思了。。
public void AddMainBill(Customer customer, User user, Project project)
也可以写
public void AddMainBill(BillItem item)
更可以二者都写。但是关键是“主账单是否包含账单明细”呢?如果是,那么就存在BillItem这种东西,你总之是需要为一种“组合了Customer、User、Project三类东西的新东西定义一个对象(类)。其实这不叫做“面向对象”,这充其量是“基于对象”。它是结构化的。如果你连结构化设计都不接受,想去应用“继承、多态”式的面向对象设计就更困难了。
{
public void CreateBillItem(Customer customer, User user, Project project);
}