繁体   English   中英

如何设计课程

[英]how to design the classes

我正在使用LINQ to SQL,3.5 Framework,并且我想知道哪种是设计类的最佳方法。 以一个非常简单的User例为例。
如果我有一个具有3个不同角色的客户,管理员,收银员的用户表。 我会说我将需要为每个角色创建3个类。 例如,customers.cs ...

题:
1)由于Linq .dbml已经从我的用户表中自动生成了User,因此所有属性都已预定义,我是否仍需要创建要被上述3个类角色继承的User.cs类? 这是因为我无法在User.cs中添加任何重复的属性,例如, Public string Name {get;set;}会失败,因为.dbml中已经具有属性调用Name。

2)这个问题是我认为非常基本的问题...但是,如果我能知道正确的答案,我觉得它很有用。 我应该如何将我的功能放到正确的类中? eg PrintYearlyReport(), CheckStaffSalary(), ModifySale(), UpdateGovernmentTax() ...。所有这些功能均在Admin的作用下。 如果我们有admin.PrintYearlyReport(), admin.ModifySale() ...这将是非常可读的。但是,如果我们将所有admin的功能都存储在Admin.cs文件中,则该文件将非常巨大!!! 为了OOP的缘故,我们需要有类似Sale.cs,Payment.cs,Invoice.cs之类的类。 如果将所有这些功能划分到每个不同的类中,那么我们将不再具有调用admin.PrintYearlyReport()的优雅方法。

  1. 您可以创建User类的子类,即CustomerAdminCashier ,然后根据用户的角色指定正确的类。 有时,我们通过创建诸如User.IsInRoleUser.HasAccessTo方法的方法进行设计,您可以调用User.HasAccessTo方法以验证它们可以访问或使用某些功能。

  2. 您可以将功能拆分为单独的文件,但仍可以通过使用partial类将它们放在同一类中。 如果定义public partial class Admin ,则可以根据需要在多个单独的文件中定义Admin类,并且在构建项目时,所有属性都将添加在一起。

让我们保持简单。 通常,最好的答案是最简单的答案。 您需要上一堂以上的课吗? 可能不是。 如果角色之间的区别很简单,那为什么需要创建子类呢? 我通常从一个类开始,因为行为定义得更好,与创建子类相比,您可以清楚地区分这些子类。 这样说来,您应该考虑想要对象的外观,这意味着您要创建的依赖项以及要共享的功能。 组成与局限性当我想到用户和角色时,我想到:用户具有角色x,而不是用户是角色x,因为角色可以更改。 通用功能和属性应在基类中。 可能是您可以将访问规则放在用户内部的类中:

User{
    Name
    Role
    Rules{ }
}

所以你可以说

if(user123.Rules.CanPrint())
{
Print();
}

在用户内部创建规则并传递角色,以便规则类可以弄清楚该用户可以做什么。 这就是我要做的。 我的观点是,不要对上什么课该挂什么。 定义对象和行为,并让类自行定义。 您将学会发现什么时候班级变得太大而需要将其分解。

您可以在类图中添加构造型,并在Java代码中获取实时持久性注释。 如果使用Hibernate,则可以从代码中获取数据库。 无需为数据库创建对象UML模型和其他模型。 这就是我所做的,真的很酷!

它仅适用于Java,不适用于c#。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM