如何编写用户可扩展的代码? [复制]

Posted

技术标签:

【中文标题】如何编写用户可扩展的代码? [复制]【英文标题】:How do I write user-extendable code? [duplicate] 【发布时间】:2010-10-13 21:08:07 【问题描述】:

作为一个 perl 程序员,我可以将字符串评估为代码 如果我愿意,我可以在 C# 中做同样的事情吗(使用字符串或其他包含用户输入的对象)?

我想要完成的是创建一个对象,它的方法可以在我的源代码中预定义,或者可以由用户在运行时通过输入表示方法或 SQL 查询的 C# 代码的字符串来定义。方法调用应始终将其标量值作为字符串返回,我相信最好提供一些预定义的“系统”变量以在方法调用中使用,并提供一些“清理”代码来验证是否实际返回了字符串.

伪 - 结构

 Object Statistic
      string  Name;
      functionref Method;

我想到的架构基本上会实时收集这些数据,并根据用户的请求将它们添加到用户想要显示的统计信息列表中。定义的统计信息可以保存到文件中,并在初始化期间加载到主程序中。这样,用户就不必不断重新定义所需的统计数据。需要编辑/更新/删除统计信息。

如果这成功了,那么我(程序员)就不必在每次有人决定他们有一条新信息想要显示在他们的统计板上但我还没有编写代码时都去添加新代码为了 。

关于从哪里开始阅读以在 C# 中完成此任务的任何想法?

此功能的目的是显示正在运行的系统/数据库的统计信息的程序。在设计时不一定知道要观察的值,也不一定知道如何定义检索所需的值。我希望允许用户定义任何我为系统预编码之外的任何统计信息。

【问题讨论】:

【参考方案1】:

查看this earlier question。

不过,还要考虑解决方案的稳定性、可扩展性和安全性。如果您允许任意执行,您的应用程序的操作和支持将不会很有趣。为外部提供的代码设置一个界限分明的沙箱。

另外,不要指望普通用户(无论他们是谁)都能成为程序员。

您可能希望通过例如提供受限但更易于管理的可扩展性。 dependency injection 代替。

【讨论】:

【参考方案2】:

我会附和 Pontus 所说的话,尤其是在稳定性、支持成本和期望用户编写代码方面。我还将性能添加到列表中,因为这些用户可能不知道他们的代码对性能的影响。由于这些原因和其他原因,面向用户的eval-like 构造在 C# 中被认为是不明智的,可能也不应该在 perl 中

相反,请查看 .Net 中的 System.AddIn 命名空间,以便为您的应用程序提供插件功能。

【讨论】:

以上是关于如何编写用户可扩展的代码? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何编写处理可选值的字典扩展

如何编写高质量的Javascript代码

如何编写可维护的 UI 屏幕?

我将如何编写 String.Format 扩展方法?

测试如何编写可维护的集成测试

如何使用列表推导来扩展 python 中的列表? [复制]