在构建集成引擎时,我一直在寻找有关设计模式的一些提示。处理导入和导出(集成)的.NET服务
我有一个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.
}
}
我敢肯定,我违反了设计模式的每一个规则有一个结构。最终,我的代码变得混乱,每层的责任(不知道我是否可以称之为图层)变得混乱起来。例如,如果一个订单也与描述和地址有一对多的关系,那么类会变得难以置信地混乱。在我的下一个项目中,我也将执行导入,并且我不会仅导出订单,而且还会导出其他主数据。所以我相信我必须在接口,帮助类等方面很聪明。在输出文件或将其插入数据库之前,我还必须验证从数据库和集成程序中检索的所有数据。
你们有没有人知道集成引擎的良好设计模式(只是一个理论)?这个问题可能并不具有建设性,但是当我们使用的小房子设计会比数十倍大的时候还不够。
任何帮助非常感谢:)谢谢!
这是很酷多少早点有意义的,因为你只需要改变的“小细节”像术语。 EF让我感到困惑,因为它就像一个魔术盒给我,可能是因为我自己没用过,只是看到了一些使用它的产品代码。我想到的另一件事是验证我插入到模型中的模型数据。但是我相信我会在某些时候解决这个问题:)这个设计模型是否指定了具体的东西?感谢您的帮助,只是术语的变化使其可以理解! – Alex07
我很抱歉再次打扰您,我决定按照您提出的命名约定来采用这种模式。如果我以上述为例,我想创建两个输出,前面提到的XML和一个Web服务连接,以及一个报告(我真正输出了什么)。 IOutputService应该是一个具有定义的报告方法和抽象的Export-method的抽象类?你为这个特定目的建议了什么设计? :) – Alex07
@ Alex07:听起来像一个很好的,自包含的代码审查问题http://codereview.stackexchange.com –