考虑下列设想一个基类是这样的:受保护的基类中的静态属性在派生类之间共享数据的良好做法?
internal class ResolveVariableStrategyBase
{
...
protected static EntityFieldVariable EntityFieldVariable { get; private set; }
protected static EntityPropertyLoader EntityPropertyLoader { get; private set; }
protected static FunctionInvoker FunctionInvoker { get; private set; }
protected static string Variable { get; private set; }
protected static object EntityValue { get; private set; }
protected static object VariableValue { get; set; }
...
protected ResolveVariableStrategyBase() { }
internal ResolveVariableStrategyBase(
EntityFieldVariable entityFieldVariable,
EntityPropertyLoader propertyLoader,
FunctionInvoker functionInvoker,
string variable,
object entityValue,
object variableValue)
{ ... }
internal virtual object Execute() { ... }
}
和几个派生类是这样的:
internal sealed class RelationStrategy : ResolveVariableStrategyBase
{
internal override object Execute()
{
var result = resolveRelation();
base.VariableValue = result;
return resolveRelation();
}
...
}
是真的是一个好主意,
具有静态在基类中的特性,以便为所有的派生类设置相同的(内部)构造函数基类,像这样电子领域:
internal RelationStrategy( EntityFieldVariable entityFieldVariable, EntityPropertyLoader propertyLoader, FunctionInvoker functionInvoker, string variable,
object entityValue, object variableValue) : base (entityFieldVariable,propertyLoader,functionInvoker,variable,entityValue,variableValue)
或者这只是懒惰优先于精心设计的代码?
什么是最佳解决方案?
这是一个快速的解决方法,但代码的作者可能有其他解释应该被听到。 – Shark
我对这段代码没有很好的感觉,并且想知道它是否必须改变。我自己写的是试图将现有的功能重构为战略模式,但我并不完全幸运,因为我不确定这些静态属性是否是好设计。 –
如果有效,请不要修复它。 KISS原理在这里很有帮助,因为我在某种程度上相当确定,即使你不想向客户端发布蹩脚的代码,你也不希望通过不必要的代码重构来引入新的未知错误那甚至没有破裂。 – Shark