重组我的申请
Restructuring my application
我正在处理一个需要重组属于网站的项目集的项目。它还在 Web 应用程序和引用的依赖项目之间具有紧密耦合的依赖关系。请帮助我提供一些关于如何将调用重构为更易于维护的代码的想法和工具。
主要方面是调用应用促销(促销 class 有超过 4 种不同的方法可用)从各种函数中消耗,这不容易流线化。
请帮助我了解最佳实践。
对不起大家 - 由于 ot 限制,我无法分享太多代码,但希望以下内容对您有所帮助
我的项目使用 N-Hibernate 进行数据访问
项目 A- web 项目 - aspx 和 ascx 代码隐藏
项目 B- 包含项目 C 使用的 class 定义(数据操作 class)
项目 C - 保存到数据库方法的业务逻辑(客户、订单、促销等)
问题出在项目 C - 我不确定它是否做了太多事情或需要打破 down.But 已经有很多其他子项目。
Project C 支持根据参数将详细信息保存到数据库
这里的一些 class 方法会根据某些条件调用提升,我想让事情变得更健壮 - 下面的示例代码
项目-C
Class - 订单逻辑
public void UpdateOrderItem(....)
{
....
....
...
}
Order order = itm.Order;
promoOrderSyncher.AddOrderItemToRawOrderAndRunPromosOnOrder(itm, ref order);
orderItemRepository.SaveOrUpdate(itm);
所以就像上面的 class 促销是从其他地方调用的,我想简化这个促销 class 文件的调用。所以我正在寻找一些概念。
在任何项目中最重要的是利用依赖注入,尤其是经常需要与持久层通信的 Web 项目。
但在此之前,您需要确保提供与数据库通信的服务的 classes 都具有接口。通常,这些 classes 称为数据访问对象 (DAO)。所以,你会有这样的东西:
public class UserDao : IUserDao
{
public User GetUserById(int id)
{
...
}
}
根据经验,对于这些数据访问对象,如果它们包含条件逻辑,那么您应该将其重构为更面向业务的服务 (class)。最好让您的数据库接口包含尽可能少的逻辑。它必须很薄,因为这一层依赖于数据库,因此很难进行单元测试。
完成此操作后,使用依赖项注入容器并注册 IUserDao 及其实现。
现在,继续前进,您将能够通过模拟 UserDao 实现来创建完全模拟该数据库的单元测试。
我可以建议:
- 用于依赖项注入的 Microsoft Unity
- FakeItEasy 用于单元测试
模拟框架
其他优秀的:
- 温莎城堡 (DI)
- Ninject (DI)
- RhinoMocks(单元测试 - 模拟
框架)
祝你好运!
希望对你有帮助。
我强烈建议不要在没有深入了解 SOLID 原则和依赖注入的情况下开始重构您的应用程序。我犯了这个错误,现在我有一个充满服务定位器(反)模式实现的应用程序,这些实现并没有让我的生活比以前更简单。
我建议您在开始之前至少阅读以下书籍:
http://www.amazon.com/Agile-Principles-Patterns-Practices-C/dp/0131857258(对于 SOLID 原则)
http://www.manning.com/seemann/(用于 .NET 依赖项注入)
http://www.amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/0131177052
一个可能的策略不是为了重构而重构,而是考虑只重构那些比其他部分接触得更多的部分。如果某些东西在工作并且没有人会改变它,那么就没有必要重构它,这可能是在浪费时间。
祝你好运!
我正在处理一个需要重组属于网站的项目集的项目。它还在 Web 应用程序和引用的依赖项目之间具有紧密耦合的依赖关系。请帮助我提供一些关于如何将调用重构为更易于维护的代码的想法和工具。
主要方面是调用应用促销(促销 class 有超过 4 种不同的方法可用)从各种函数中消耗,这不容易流线化。
请帮助我了解最佳实践。
对不起大家 - 由于 ot 限制,我无法分享太多代码,但希望以下内容对您有所帮助
我的项目使用 N-Hibernate 进行数据访问 项目 A- web 项目 - aspx 和 ascx 代码隐藏 项目 B- 包含项目 C 使用的 class 定义(数据操作 class) 项目 C - 保存到数据库方法的业务逻辑(客户、订单、促销等)
问题出在项目 C - 我不确定它是否做了太多事情或需要打破 down.But 已经有很多其他子项目。
Project C 支持根据参数将详细信息保存到数据库 这里的一些 class 方法会根据某些条件调用提升,我想让事情变得更健壮 - 下面的示例代码
项目-C Class - 订单逻辑
public void UpdateOrderItem(....)
{
....
....
...
}
Order order = itm.Order;
promoOrderSyncher.AddOrderItemToRawOrderAndRunPromosOnOrder(itm, ref order);
orderItemRepository.SaveOrUpdate(itm);
所以就像上面的 class 促销是从其他地方调用的,我想简化这个促销 class 文件的调用。所以我正在寻找一些概念。
在任何项目中最重要的是利用依赖注入,尤其是经常需要与持久层通信的 Web 项目。
但在此之前,您需要确保提供与数据库通信的服务的 classes 都具有接口。通常,这些 classes 称为数据访问对象 (DAO)。所以,你会有这样的东西:
public class UserDao : IUserDao
{
public User GetUserById(int id)
{
...
}
}
根据经验,对于这些数据访问对象,如果它们包含条件逻辑,那么您应该将其重构为更面向业务的服务 (class)。最好让您的数据库接口包含尽可能少的逻辑。它必须很薄,因为这一层依赖于数据库,因此很难进行单元测试。
完成此操作后,使用依赖项注入容器并注册 IUserDao 及其实现。
现在,继续前进,您将能够通过模拟 UserDao 实现来创建完全模拟该数据库的单元测试。
我可以建议:
- 用于依赖项注入的 Microsoft Unity
- FakeItEasy 用于单元测试 模拟框架
其他优秀的:
- 温莎城堡 (DI)
- Ninject (DI)
- RhinoMocks(单元测试 - 模拟 框架)
祝你好运! 希望对你有帮助。
我强烈建议不要在没有深入了解 SOLID 原则和依赖注入的情况下开始重构您的应用程序。我犯了这个错误,现在我有一个充满服务定位器(反)模式实现的应用程序,这些实现并没有让我的生活比以前更简单。
我建议您在开始之前至少阅读以下书籍:
http://www.amazon.com/Agile-Principles-Patterns-Practices-C/dp/0131857258(对于 SOLID 原则)
http://www.manning.com/seemann/(用于 .NET 依赖项注入)
http://www.amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/0131177052
一个可能的策略不是为了重构而重构,而是考虑只重构那些比其他部分接触得更多的部分。如果某些东西在工作并且没有人会改变它,那么就没有必要重构它,这可能是在浪费时间。
祝你好运!