【问题标题】:Organizing classes in C#用 C# 组织课程
【发布时间】:2012-09-11 01:44:11
【问题描述】:

什么是一些最佳实践,你应该在哪里/如何组织类,以便开发人员轻松使用,没有任何困难,我正在 C# 静态类库中创建一个框架,为一个特定域。

这是我的设计。

我创建了一个静态类:

public static class Pages
{
   //static prop to get access HomePage class
   public static HomePage HomePage
   {
       get {
              var _home = new HomePage();
              return _home;
           }
   }
   //static prop to get access Employee class
   public static Employee EmployeePage
   {
       get {
              var _employeePage = new Employee();
              return _employeePage;
           }
   }
   //static prop to get access Employer class
   public static Employer EmployerPage
   {
       get {
              var _employerPage = new Employer();
              return _employerPage;
           }
   }

}

我为 HomePage、Employee、Employer 创建了单独的类(非静态) 例如:

//Implementation class 
public class Employee
{    
    public bool Status()
    {
        return true;
    }

.... more code.....

}

这是一个重要的问题:

用户应该能够访问这样的东西。

bool _status = Page.Employee.Status();

or

Page.HomePage.SomeMethod();

我的方向正确吗?

关注: 我对上述方法的唯一关注是,Pages 类....我将添加更多类,最终我将在 @ 中拥有实例化类987654325@class这样可以吗?

或任何其他更好的方法?

【问题讨论】:

  • 是EmployerPage 派生自Employer?
  • 那么你如何从Employer 类型的属性中返回EmployerPage 对象类型?它根本不会编译。
  • Tigran:我只是举一个例子来获得一个想法,但我的核心问题是,如果我想要这样的东西,我应该如何处理:Page.HomePage.<some_method_name> 如果你有更好的想法,请告诉我并这只是我项目的开始 :)
  • 我怀疑任何人都能够帮助您进行设计,因为您的示例不符合我所见过的任何设计或 C# 的正确使用。如果您编辑这篇文章并详细说明您想要实现的目标,可能会更清楚?

标签: c# domain-driven-design


【解决方案1】:

不,我绝对不会那样做。对于构造函数调用,拥有一个 just 语法糖(或者在这种情况下是误导)的静态属性很奇怪。如果你真的想隐藏实现类,它会更有意义(尽管我会使用那些静态属性方法),但我看不到这里的好处。

此外,Status 听起来应该是一个属性,而不是一个方法。哦,对我来说,Employee 听起来不像 Page - 它听起来像是员工数据本身。让您的类型名称描述它们所代表的内容。所以你应该有类似的东西:

bool status = new EmployeePage().Status;

【讨论】:

  • 乔恩,谢谢,这只是我想通过的一个例子,但我明白我应该有更有意义的名字,但我的核心问题是,如果我想要这样的东西,我应该如何处理:@ 987654325@
  • @AbuHamzah:您应该首先问自己为什么您希望颠覆常规的 C# 编码。您应该要么直接创建页面,或者您应该将该页面作为依赖项提供给您。我认为您在此处建议的方法没有任何好处-您添加的绒毛没有任何好处。
  • 我清楚地听到了乔恩!我的问题是关于最佳实践的,如果你认为它很浮夸,你会怎么想出这个设计,我想看看
【解决方案2】:

Pages 类更像是一个命名空间,而不是一个类。您在那里绘制的属性创建一个页面,而不是获取一些东西。这感觉不对。你所建造的似乎更像是一个工厂。你想要一个工厂还是在Pages类中积累这些属性的目的是什么?

由于您对要实现的目标非常模糊,因此答案也是如此。但是在一个地方有这么多静态的东西立刻让人感觉很奇怪,也许除了常量。

【讨论】:

  • 我在Pages 类中有prop 的原因是无需实例化该类即可访问其他类——这就是我的类的全部目的
  • 我认为这是将实现与接口分离的提示。也许你应该看看接口和类在 C# 中是如何工作的。这已经是很多需要覆盖的地方了。但作为后续,您可以调查工厂模式。
  • 没关系,你在不同的页面上,然后我正在尝试做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-22
  • 1970-01-01
  • 1970-01-01
  • 2015-09-06
  • 2015-11-12
  • 2010-10-17
相关资源
最近更新 更多