【发布时间】:2014-02-03 00:09:04
【问题描述】:
我一直在谷歌上搜索有关构建集成引擎时设计模式的一些技巧。
我有一个 SQL Server 来保存我想要导出的所有数据(这也是我将插入我导入的数据的地方)。我有一项服务可以根据时间间隔等执行命令。虽然我真正纠结的一件事是在软件中处理数据处理的方式。
例如,在我制作的导出程序中,我有一个类似的结构
// Entity order
public class Order {
int OrderID { get; set; }
string OrderNo { get; set; }
// One order can include loads of registrations
// A registration can only have a reference to one order
// Basically a mirror of the database
List<Registration> RegistrationList { get; set; }
}
// Entity registration
public class Registration {
int RegistrationID { get; set; }
string Name { get; set; }
// Some more variables
}
// Controller(?)
public class OrderController : IControlOrder
{
private IControlRegistrations _registrationController;
public OrderController()
{
this._registrationController = new RegistrationController();
}
public List<Order> get() {
List<Order> orderList = new List<Order>();
// Query database
foreach(...) {
// Short example
Order order = new Order();
order.OrderNo = ...
order.OrderID = ...
order.RegistrationList = _registrationController.getRegistrationsBasedOnOrder(order);
}
// Iterate through every row
// Create a new Order-object per iterate
return orderList;
}
public void updateOrder(Order order) {
// Update the order in the database (set exported-flag)
}
}
public RegistrationController : IControlRegistrations
{
public List<Registration> getRegistrationsBasedOnOrder(Order order)
{
List<Registration> list = new List<Registration>();
// Query DB based on OrderID
return list;
}
public void update(Registration registration)
{
// Update the registration in the database
}
}
// Output
public class Output
{
private IControlOrder _controller;
public Output(IControlOrder controller)
{
this._controller = controller;
}
public void export()
{
// Build XML
// ... Example
//
//<Orders>
// <Order>
// <OrderNo>KF322</OrderNo>
// <RegistrationList>
// <!-- All the registrations with a reference to this order -->
// </RegistrationList>
// </Order>
// <Order>
// <OrderNo>KF323</OrderNo>
// <RegistrationList>
// <!-- All the registrations with a reference to this order -->
// </RegistrationList>
// </Order>
//</Orders>
foreach(Order order in _controller.get())
{
// Create the order info in the XML, then create registrations
foreach(Registration reg in order.RegistrationList)
{
// Create the registration list in the XML
}
}
// Save the file to a network drive.
}
}
我很确定我违反了设计模式的每一条规则。最终我的代码变得杂乱无章,每一层的责任(不确定我是否可以称之为层)变得一团糟。例如,如果订单还与描述和地址存在一对多关系,OrderController 类会变得非常混乱。在我的下一个项目中,我还将实施导入,我不仅会导出订单,还会导出其他类似的主数据。所以我相信我必须精通接口、帮助类等。在输出文件或将其插入数据库之前,我还必须验证从数据库和集成程序中检索到的所有数据。
你们中是否有人知道集成引擎的良好设计模式(只是一个可遵循的理论)?这个问题可能没有建设性,但是当程序要大几十倍时,我使用的小房子设计是不够的。
非常感谢任何帮助 :) 谢谢!
【问题讨论】:
标签: c# .net sql-server design-patterns integration