以下是这种情况:
我有一堆所有依赖于相同数据的类。因此,我最终会在每个类中复制所有必需的属性,并根据需要传递它。
这意味着如果有新要求,我可能需要向使用所述数据的所有类添加新属性,或者我可能必须从我声明这些数据的每个类中删除属性属性。
我正在开发一个asp .net应用程序,它有一个HTTP处理程序来解析查询字符串,获取参数然后将它们分配给我的基类,然后可以将这些参数传递给自定义控件,其他类等。
有没有办法可以在每个需要它的类中共享这些数据而不将它们作为每个类的属性包含在内?什么被认为是这种情况下的最佳做法?
修改
我倾向于构图解决方案。我希望有一种更好的方式来共享数据,而不必将其作为属性添加到需要它的每个类。如何创建一个包含我的属性的类并将其分配给HTTP Handler中的HttpContext.Current.Items对象呢?然后我可以在整个应用程序中从HttpContext访问所需的属性,而不必将属性添加到每个类,思考?使用HttpContext.Items对象有什么优缺点?
答案 0 :(得分:2)
支持composition over inheritance,为每个需要数据的类提供一个共同类型的属性:
public class A
{
public Record Data { get; set; }
}
public class B
{
public Record Data { get; set; }
}
public class Record
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Title { get; set; }
}
现在每个类中只有一个属性,而不是复制三个属性。此外,您不会必须创建基类,以便共享这些属性。那就是:你现在使用组合而不是继承。
答案 1 :(得分:1)
最简单的解决方案可能是列出所有类所需的属性,并将它们捆绑到一个单独的类中。然后,每个类只能有一个字段/属性,它包含新类的实例。
根据具体情况,您还可以创建两个或三个类,例如,如果它从问题域更有意义,或者某些类只需要属性的子集。
答案 2 :(得分:1)
定义合并配置数据的配置类。理想情况下,它将使用数据创建(例如,使用静态工厂方法),并且其所有属性都将是const / readonly。
下一步是决定你是否会在构建时为你的类传递它,拥有一个包含这个(这些)配置类的全局注册表或其他选项。我建议阅读Fowler的Dependency Injection文章,了解这些方法的优缺点以及它们对单元测试的影响。
答案 3 :(得分:0)
您可以将属性放入基类中,并让所有类继承它。像:
public class A
{
public string Prop1 { get; set; }
public string Prop2 { get; set; }
//etc.
}
public class B : A
public class C : A