我正在使用实体框架来生成'CClass'实体,如下所示:
public partial class CClass: EntityObject
{
#region Factory Method
#region Primitive Properties
}
我的其余部分类实现是
public partial class CClass : IDemoralize
{
public Value xValue { get; set; }
public void IDemoralize.Demoralize()
{
// implementation
}
public void IDemoralize.Demoralize(Func<IDemoralize, bool> CustomDemoralization)
{
bool success = CustomDemoralization(this);
if (!success)
throw new ApplicationException();
}
public void IDemoralize.WriteModel()
{
// implementation
}
public void IDemoralize.WriteModel(Func<IDemoralize, bool> Write)
{
bool success = Write(this);
if (!success)
throw new ApplicationException();
}
}
现在,由于下面列出的两种方法在整个设计中都有共同的实现,我想将它们移动到一个名为DemoralizeBase的基类,因此如果代码需要更改,那么一致性就变得易于管理。
// in DemoralizeBase
public void Demoralize(Func<IDemoralize, bool> CustomDemoralization)
{
//implementation
}
public void WriteModel(Func<IDemoralize, bool> Write)
{
// implementation
}
有没有办法做到这一点,或者我应该采用现有的设计?
答案 0 :(得分:3)
你可以把它们写成扩展方法:
public static class Demoralize {
public static void Demoralize(this IDemoralize obj,
Func<IDemoralize, bool> CustomDemoralization) {...}
public static void WriteModel(this IDemoralize obj,
Func<IDemoralize, bool> Write) {...}
}
这将,就像它是一个实例方法,即
var foo = new CClass();
foo.Demoralize(...);
需要注意的一点是:在当前实例上调用扩展方法时,this.
(通常是可选的) 必需 ,即
Demoralize(...); // does not work
this.Demoralize(...); // works
答案 1 :(得分:1)
我会在这里寻找一些依赖注入。 IDemoralize定义了4种方法,其中2种方法在您的框架中具有通用实现。 我要做的是:从IDemoralize中提取一个新接口,并将一个依赖项添加到一个实现该接口的对象到CClass。
public interface IDemoralizeBase
{
void Demoralize(Func<IDemoralize, bool> CustomDemoralization);
void WriteModel(Func<IDemoralize, bool> Write);
}
将对象IDemoralizeBase添加到CClass,并定义一个允许您注入依赖项的构造函数
public class CClass : IDemoralize
{
public IDemoralizeBase MyDemoralizer {get; private set;}
public CClass(IDemoralizeBase basicDemoralizer)
{
MyDemoralizer = basicDemoralizer;
}
public void Demoralize(Func<IDemoralize, bool> CustomDemoralization)
{
MyDemoralizer.Demoralize(CustomDemoralization);
}
public void WriteModel(Func<IDemoralize, bool> Write)
{
MyDemoralizer.WriteModel(Write);
}
}
这将允许您创建一个或 n 类来实现IDemoralizeBase,这样,如果您在某些特殊情况下得到一些特殊的实现,您可以注入一个特殊的依赖项。
干杯,
圣拉斐尔