我正在编写一个包含多个类的桌面项目,并将许多参数放在几个数据库表中,以便在部署后轻松进行集中维护。问题是这些参数可能会在这些类中使用(似乎这使得这些类具有硬编码的内容而不再泛化)。
我应该尽量避免这种情况发生吗?如果是这样,我该怎么做?
我提出了两种可能的解决方案:1)使用函数参数在调用它们时将这些参数传递给类(但是可能需要传入许多参数,其中一些参数可能具有非通用名称所以这仍然会使这个课程没有概括)。 2)使用事件使所有这些参数仅在主类中分配。这将使所有类一般化,主类是唯一保持代码中所有参数设置的地方。但是,在代码中实现这种逻辑是相对困难的。这是解决此问题的正确方法,还是有其他更好的方法可以解决此问题?
非常感谢你提前提出的意见。
魏
答案 0 :(得分:1)
至少我建议的是通过某些界面(如ICustomParameters
)抽象您的参数,以避免潜在的方法签名更改。
为了提供更多的想法,很高兴看到类图或至少对类之间关系,参数类型等的简短描述......
答案 1 :(得分:0)
如果没有得到一些代码的插图示例,很难理解确切的问题,但我会概括我的回答...... 你所描述的是我一段时间以来所经历过的同样的事情,通常它是使函数对很多事情做的最终结果......
我不确定您是否熟悉模式/最佳实践,但直接考虑单一责任原则 - WIKI Single Responsibility Principle
重新审视您正在调用的方法和函数,看看是否有一种方法可以将它们的复杂性降低到可能的最小参数。显然,使用根方法可能需要许多参数 - 通常我使用依赖注入和接口,这样函数参数就不会变长。
例如,具有以下内容的方法......
class ExampleClass
{
void MethodWithManyParameters(int a, int b, int c, int d, int e, int f, int g)
{
}
}
可以重构为如下所示......
interface iExample
{
int a { get; set; };
int b { get; set; };
int c { get; set; };
int d { get; set; };
int e { get; set; };
int f { get; set; };
int g { get; set; }
}
class ExampleClass
{
void MethodWithManyParameters(iExample value)
{
}
}
希望这会给你一些想法,显然不是没有特定情况的完整解决方案......