Architecture 使应用程序可定制的最佳实践?

Architecture 使应用程序可定制的最佳实践?,architecture,customization,extensibility,Architecture,Customization,Extensibility,我对阅读其他开发人员和架构师为特定站点定制其应用程序的特定区域的各种方式感兴趣。调用客户实现的预处理和后处理,事件执行相同的操作,允许覆盖业务逻辑方法,使用具有可插拔模块的策略、数据可配置流程,例如规则引擎、脚本等 这个列表还可以继续,但我要问的是谁使用了哪些方法,每种方法的优缺点是什么,以及还有哪些其他方法 这假设我们不创建特定于客户的代码分支来适应这些定制 我倾向于将所有内容模块化,然后根据客户的要求向程序中添加内容。您可以将其与客户可以控制的应用程序设置相结合,允许他们自己添加和删除模块。

我对阅读其他开发人员和架构师为特定站点定制其应用程序的特定区域的各种方式感兴趣。调用客户实现的预处理和后处理,事件执行相同的操作,允许覆盖业务逻辑方法,使用具有可插拔模块的策略、数据可配置流程,例如规则引擎、脚本等

这个列表还可以继续,但我要问的是谁使用了哪些方法,每种方法的优缺点是什么,以及还有哪些其他方法


这假设我们不创建特定于客户的代码分支来适应这些定制

我倾向于将所有内容模块化,然后根据客户的要求向程序中添加内容。您可以将其与客户可以控制的应用程序设置相结合,允许他们自己添加和删除模块。在这种情况下,您所要做的就是设置一个默认配置。

我倾向于将所有内容模块化,然后根据客户的要求向程序中添加内容。您可以将其与客户可以控制的应用程序设置相结合,允许他们自己添加和删除模块。在这种情况下,您所要做的就是设置一个默认配置。

对于我使用的产品,由服务组为给定客户构建的定制,或者有时由客户自己构建的定制,将共享给团队的其他成员(对于我们制作的内容),并且通常在以后的版本中“产品化”

我们支持[几乎]完全访问API,它可以用来[几乎]做GUI可以做的任何事情,但是以自动化的方式

我们鼓励客户编写自定义脚本,然后与我们共享。通过扩展增加产品的可用性,无论这些扩展是得到官方支持,还是仍然是社区工具,都有助于在您的客户群中建立良好的信誉


对于我们构建的定制,当向特定客户计费时,初始工作可以在其他地方快速实施,允许当前和未来用户在使用产品时灵活使用mroe。

对于我使用的产品,由服务组为给定客户构建的定制,或者有时由客户自己分享给团队的其他成员(我们制作的东西),并在以后的版本中经常“产品化”

我们支持[几乎]完全访问API,它可以用来[几乎]做GUI可以做的任何事情,但是以自动化的方式

我们鼓励客户编写自定义脚本,然后与我们共享。通过扩展增加产品的可用性,无论这些扩展是得到官方支持,还是仍然是社区工具,都有助于在您的客户群中建立良好的信誉


对于我们构建的定制,当向特定客户计费时,初始工作可以在其他地方快速实施,从而允许当前和未来用户在使用产品时具有mroe灵活性。

MS正在.NET中为此使用两种不同的框架:托管扩展性框架和System.Addin


应用程序公开可扩展性最常用的方式可能是通过依赖项注入/控制反转与运行时类型解析相结合。这意味着,您可以让外部实体在运行时“注入”接口的实现,而不是在编译时绑定到特定的实现。您的代码不在乎您的IRepository是由您的公司还是由第三方编写的。通过对接口进行编码并使用DI/IOC框架,您可以轻松定制您的应用程序。

MS正在.NET中为此开发两种不同的框架:托管可扩展性框架和System.Addin


应用程序公开可扩展性最常用的方式可能是通过依赖项注入/控制反转与运行时类型解析相结合。这意味着,您可以让外部实体在运行时“注入”接口的实现,而不是在编译时绑定到特定的实现。您的代码不在乎您的IRepository是由您的公司还是由第三方编写的。通过对接口进行编码并使用DI/IOC框架,您可以轻松定制您的应用程序。

一种方法是嵌入脚本语言(python和javascript似乎很流行),并通过脚本扩展公开大量API。您可能会发现用脚本语言实现部分应用程序也更容易。

一种方法是嵌入脚本语言(python和javascript似乎很流行),并通过脚本扩展公开API的重要部分。您可能会发现,用脚本语言实现应用程序的某些部分也更容易。

我发现,将应用程序创建为一个模块库,可以从一种好的嵌入式脚本语言(正是为此而创建的!)访问,这不仅为用户提供了巨大的灵活性;但对你自己也是如此。

我发现,将你的应用程序创建为一个模块库,可以从一种好的嵌入式脚本语言(正是为此而创建的!)访问,这不仅为用户提供了巨大的灵活性;但对你自己来说也是如此。

我的观点是允许对核心流程进行自定义更改,其中添加和删除模块意味着将这些流程分解到一个非常精细的粒度,但这是一个很好的方法。保持所有内容模块化还有一个额外的好处——发送错误修复意味着发送一个新模块,不是一个完整的新程序,客户可以将旧模块换成新模块。这一点很好,但是如何在没有每个模块的方法的情况下构建它呢?我仍然认为人们,大部分不是你,没有理解我的观点,即定制处理不是一个附加组件,而是一个替代品