使用ActiveRecord开发的过程中我想大家都想到过,配置那么多要是不Ctrl+C/Ctrl+V还得自己去记在脑袋里,必然杂弄?
无论你是使用Hashtable,ArrayList等集合对象来处理还是使用web.config类配置或是使用XML文件单独配置,始终你都得记住或是让你的硬盘帮你记住ActiveRecord的配置串.方便你Ctrl+C/Ctrl+V.
[使用集合对象处理]
Hashtable properties = new Hashtable();
properties.Add("hibernate.connection.driver_class", "NHibernate.Driver.SqlClientDriver");
properties.Add("hibernate.dialect", "NHibernate.Dialect.MsSql2000Dialect");
properties.Ad("hibernate.connection.provider","NHibernate.Connection.DriverConnectionProvider");
properties.Add("hibernate.connection.connection_string", "Data Source=.;
Initial Catalog=test;Integrated Security=SSPI");
InPlaceConfigurationSource source = new InPlaceConfigurationSource();
source.Add(typeof(ActiveRecordBase), properties);
[使用xml配置节]
<activerecord>
<config>
<add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver" />
<add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect" />
<add key="hibernate.connection.provider"
value="NHibernate.Connection.DriverConnectionProvider"/>
<add key="hibernate.connection.connection_string"
value="Data Source=.;Initial Catalog=test;Integrated Security=SSPI" />
</config>
</activerecord>
使用上面这两种方式是不是都很麻烦,上周我在公司做项目的时候想到去写一个通用方法来处理ActiveRecord,个人觉得很不错,把思想写下来大家分享.
解决方案分析
针对这种情况,我的思路是把配置用方法封装起来,通过传递数据库名和项目实体数据程序集给方法,具体的实现交给方法封装方法去搞定,如下示:
因为Castle所支持的不只是MSSQL这一种数据库,MYSQL,DB2.......也支持,既然是通用方法,那考虑这一点是必要的.这里我采用了工厂模式,定义抽象类和抽象方法,让派生类来实现他,通过工厂根据需要调用不同的实现类方法:
1public abstract class Initialize
2{
3 public abstract void ActiveRecordInit(string dataBase,string model);
4}