Architecture 应用程序设计/架构

Architecture 应用程序设计/架构,architecture,Architecture,我正试图为下面的场景设计,但我无法理解它 我在数据库表中有一些记录,它们表示应用程序需要执行的任务。每个记录都映射到一个特定的C#函数。因此,向表中添加行需要通过为其创建特定任务来重建应用程序 到目前为止,我已经添加了一个基类,并在每次需要添加新功能时创建一个新类 基类: 公共抽象类TaskBase {public abstract void DoWork();} 公共密封类Task001:TaskBase {public override void DoWork(){/*记录特定代码*/} 公

我正试图为下面的场景设计,但我无法理解它

我在数据库表中有一些记录,它们表示应用程序需要执行的任务。每个记录都映射到一个特定的C#函数。因此,向表中添加行需要通过为其创建特定任务来重建应用程序

到目前为止,我已经添加了一个基类,并在每次需要添加新功能时创建一个新类

基类:
公共抽象类TaskBase
{public abstract void DoWork();}

公共密封类Task001:TaskBase
{public override void DoWork(){/*记录特定代码*/}

公共密封类Task002:TaskBase
{public override void DoWork(){/*记录特定代码*/}}


很难解释为什么要这么做,所以我就不去了。虽然我相信在设计和实用性方面有更好的方法来实现这一点。有什么建议吗?在这里,我使用C#和.NET的反射功能真的很有帮助。

您可以将基类作为通用DLL中的接口,然后对于每个任务,您需要有一个新的DLL,其中包含基于基类接口的任务DoWork实现

在数据库中,您可以为每一行添加TAKS DLL路径(或者您只能添加程序集名称并使所有DLL安装在预定义的目录中)。然后使用.NET反射,您可以加载任务程序集,并根据基本接口动态调用“DoWork”方法


最好将代码放在DB中,因为任务DLL将被预编译并且更安全。而且,您不需要每次添加新任务时都重新构建主应用程序

取决于任务的性质,但是您可以将代码放入数据库中,然后使用反射来发出代码,这样就不需要每次都重新生成代码。IronPython或IronRuby也是可能的。我需要评估这一方案的实施和安全影响。我所说的实现是指代码在添加到数据库之前需要进行测试,因为我无法访问编译时错误。好的建议。为测试编写一个小小的应用程序。当然,如果有对数据库的外部访问,某种形式的加密将是“erm明智的”。不是您想要简化的那种sql注入错误。。。。