工厂方法+配置文件+反射
1.通过配置+反射,可以实现“开放封闭”原则,对扩展开放,对修改封闭。
2.易维护,通过分层,将程序进行分层,进行职责划分。
3.可用性提高。单独维护一个DLL文件即可。可以实现插拔操作。
工厂方法+配置文件+反射,主要是一种思路的体现,通过这种方式可以扩展我们的思维方式。
1.Yang.ISQL
数据库操作的接口,作为Yang.MSSQL、Yang.Oracle的标准,所有在业务逻辑层的调用全部使用这个接口。
using Yang.Model;
namespace Yang.ISQL
{
public interface IOrder
{
string Add(Order entity);
string Update(Order entity);
}
}
2.Yang.MSSQL
实现Yang.ISQL,实现MSSql的数据库插入、修改、查询,等操作。
using Yang.ISQL;
using Yang.Model;
namespace Yang.MSSQL
{
public class OrderBO : IOrder
{
public string Add(Order entity)
{
return "插入 MSSQL" + entity.OrderNO + ";" + entity.TotalMoney;
}
public string Update(Order entity)
{
return "更新 MSSQL" + entity.OrderNO + ";" + entity.TotalMoney;
}
}
}
3.Yang.Oracle
实现Yang.ISQL,实现Oracle的数据库插入、修改、查询,等操作。
using Yang.ISQL;
using Yang.Model;
namespace Yang.Oracle
{
public class OrderBO : IOrder
{
public string Add(Order entity)
{
return "插入 Oracle" + entity.OrderNO + ";" + entity.TotalMoney;
}
public string Update(Order entity)
{
return "更新 Oracle" + entity.OrderNO + ";" + entity.TotalMoney;
}
}
}
4.Yang.Model
模型、实体层,所有的数据操作都是通过实体来进行操作。
using System;
namespace Yang.Model
{
public class Order
{
public string OrderNO { get; set; }
public decimal TotalMoney { get; set; }
public DateTime AddDateTime { get; set; }
}
}
5.Yang.Configuration
配置文件。主要实现方法配置文件的作用,可以参考:自定义配置文件读取
6.AbstractFactory
测试,实用。
配置文件:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="PersistenceSection" type="Yang.Configuration.PersistenceProperty, Yang.Configuration"/>
</configSections>
<PersistenceSection>
<Persistences>
<Persistence PropertyName="Order" PropertyValue="Yang.MSSQL.OrderBO, Yang.MSSQL" ></Persistence>
<Persistence PropertyName="Customer" PropertyValue="Yang.Oracle.CustomerBO, Yang.Oracle"></Persistence>
</Persistences>
</PersistenceSection>
</configuration>
调用,使用:
[Test]
public void Test2()
{
var customer = new Customer {CustomerNO = "c001", FullName = "杨"};
var order = new Order {OrderNO = "D001", TotalMoney = 20.55m};
var sql = IOrderMSSQL;
sql.Add(order);
var orcale = ICustomerOrcale;
orcale.Add(customer);
}
private IOrder IOrderMSSQL
{
get
{
PersistenceProperty property =
(PersistenceProperty) ConfigurationManager.GetSection(ConfigName.PersistenceSection);
PersistenceElementCollenction collection = property.GetElementCollection;
var item = collection["Order"];
string clasName = item.EntityClass;
var type = Type.GetType(clasName);
return Activator.CreateInstance(type) as IOrder;
}
}
private ICustomer ICustomerOrcale
{
get
{
PersistenceProperty property =
(PersistenceProperty)ConfigurationManager.GetSection(ConfigName.PersistenceSection);
PersistenceElementCollenction collection = property.GetElementCollection;
var item = collection["Customer"];
string clasName = item.EntityClass;
var type = Type.GetType(clasName);
return Activator.CreateInstance(type) as ICustomer;
}
}
配置调用数据,反射创建实体,接口调用(规范化)。
下载源代码:文件下载