现有实施:
我已经为数据库连接实现了工厂模式。我有三个DB像sql,oracle和sybase。所有三个类(如sqlConnector,OracleConnector和SybaseConnector)都已在Iconnect接口中实现,并且在工厂方法中,我已根据switch case创建了这些具体类(sqlConnector,OracleConnector和SybaseConnector)的对象,并返回了特定对象。
情境:
我想修改这个工厂模式,并希望从工厂方法中删除所有switch case,并希望通过config file / xml配置,也不使用reflection和spring.net。假设tommorow我引入了新的db类型,我不想更改代码。我将在config / xml中输入,它应该将对象返回给客户端而不更改工厂。
问题:
我如何实现可配置的工厂模式意味着假设明天引入新的数据库类型,例如" MySql",我不想更改工厂代码。
答案 0 :(得分:3)
这是一个非常广泛的问题,但我认为最适合您的技术是Managed Extensibility Framework或MEF。
MEF是.NET不可或缺的一部分,它允许您在解决方案中包含其他组件,而无需事先知道这些组件是什么。在构建解决方案之后,MEF会自动发现并将组件包含在您的解决方案中。
您可以定义可以扩展解决方案的点;编写每个组件以利用这些可扩展性点; MEF自动将它们联系在一起。
如果您使用了Inversion of Control框架,比如依赖注入库(Ninject,Castle Windsor,SimpleInjector等),那么您已经做了类似这样的事情,这些概念对您来说应该有些熟悉
解释它并向您展示如何使用它将需要一本书。但是,我有理由相信它会最好地解决您的问题。有书籍,博客,视频和许多例子。