Met*_*urf 22 c# oop design-patterns class-design
您在设计一个拥有超过100个房产的班级时会提供哪些建议/建议/指导?
背景
建议?
编辑 在阅读了一些很好的回答并进一步思考之后,我认为这个问题确实没有任何单一答案.然而,由于我们最终根据LBrushkin的答案对我们的设计进行了建模,我给了他信任.尽管不是最受欢迎的答案,但LBrushkin的回答帮助我们定义了几个界面,我们在整个应用程序中聚合和重用这些界面,并推动我们调查一些可能有用的模式.
Phi*_*ace 33
您可以尝试像数据库表一样"规范化"它.也许把在所有的地址相关的属性Address,例如类-然后有一个BillingAddress和MailingAddress类型的财产Address在你的Invoice班级.这些类也可以在以后重用.
Dan*_*ner 22
糟糕的设计显然在您提交的系统中 - 没有发票有100多个属性无法分组到子结构中.例如,发票将拥有客户,而客户将拥有ID和地址.地址反过来将有一条街道,一个邮政编码,还有其他什么.但所有这些属性不应直接属于发票 - 发票没有客户ID或邮政编码.
如果你必须建立一个发票类,所有这些属性直接附加到发票上,我建议为客户,地址和所有其他所需的东西制作一个包含多个类的简洁设计,然后将这个设计良好的对象图包装起来使用胖发票类没有存储和逻辑本身只是将所有操作传递给后面的对象图.
嗯...是所有那些真正相关的明确,并且只给发票?通常我看到的是:
class Customer:
.ID
.Name
class Address
.ID
.Street1
.Street2
.City
.State
.Zip
class CustomerAddress
.CustomerID
.AddressID
.AddressDescription ("ship","bill",etc)
class Order
.ID
.CustomerID
.DatePlaced
.DateShipped
.SubTotal
class OrderDetails
.OrderID
.ItemID
.ItemName
.ItemDescription
.Quantity
.UnitPrice
Run Code Online (Sandbox Code Playgroud)
把它们捆绑在一起:
class Invoice
.OrderID
.CustomerID
.DateInvoiced
Run Code Online (Sandbox Code Playgroud)
打印发票时,将所有这些记录连接在一起.
如果你真的必须拥有100多个属性的单个类,那么使用字典可能会更好
Dictionary<string,object> d = new Dictionary<string,object>();
d.Add("CustomerName","Bob");
d.Add("ShipAddress","1600 Pennsylvania Ave, Suite 0, Washington, DC 00001");
d.Add("ShipDate",DateTime.Now);
....
Run Code Online (Sandbox Code Playgroud)
这里的想法是将你分成逻辑单位.在上面的示例中,每个类对应于数据库中的表.您可以将其中的每一个加载到数据访问层中的专用类中,或者在生成报表(发票)时从存储它们的表中选择一个联接.
| 归档时间: |
|
| 查看次数: |
2866 次 |
| 最近记录: |