一、综合运用设计模式优化架构
观察者模式
- 应用场景:在电商系统中,订单状态的变化、库存数量的变动等事件往往需要通知多个相关模块。例如,当订单状态变为“已发货”时,需要通知库存管理模块更新库存,通知用户模块给用户发送发货通知等。
- 实现方式:
- 定义一个主题(Subject)接口,包含注册观察者(Attach)、移除观察者(Detach)和通知观察者(Notify)方法。
- 具体的主题类(如OrderSubject)实现该接口,维护一个观察者列表,并在状态变化时调用Notify方法通知所有观察者。
- 定义观察者(Observer)接口,包含一个更新(Update)方法。具体的观察者类(如InventoryObserver、UserObserver)实现该接口,在Update方法中执行相应的业务逻辑。
责任链模式
- 应用场景:对于用户权限控制,不同级别的权限验证可以构成一条责任链。例如,简单的登录验证、订单操作权限验证等。每个验证环节都可以看作是责任链上的一个节点,请求沿着责任链传递,直到有节点能够处理该请求。
- 实现方式:
- 定义一个抽象的处理者(Handler)类,包含一个指向下一个处理者的引用和一个处理请求的抽象方法(HandleRequest)。
- 具体的处理者类(如LoginHandler、OrderPermissionHandler)继承自抽象处理者类,在HandleRequest方法中进行相应的权限验证,如果自身能够处理则处理,否则将请求传递给下一个处理者。
二、重构技巧优化架构
提取接口
- 应用场景:在库存管理模块中,不同类型的仓库(如普通仓库、冷链仓库等)可能有不同的库存操作方式,但都有一些共同的操作,如入库、出库等。
- 实现方式:提取一个IWarehouse接口,包含入库(InStock)、出库(OutStock)等方法。具体的仓库类(如NormalWarehouse、ColdChainWarehouse)实现该接口。这样,在其他模块调用库存管理功能时,只需要依赖IWarehouse接口,而不需要关心具体的仓库类型,提高了系统的可维护性和可扩展性。
提炼方法
- 应用场景:在订单处理模块中,订单创建的过程可能包含多个复杂的步骤,如验证用户信息、检查库存、生成订单编号等。这些步骤混合在一个方法中会使代码可读性变差,也不利于维护和复用。
- 实现方式:将每个步骤提炼成单独的方法,如ValidateUserInfo、CheckInventory、GenerateOrderNumber等。在订单创建方法中调用这些提炼后的方法,使代码结构更加清晰,每个方法的职责单一,便于维护和复用。
三、核心业务流程:订单处理流程的设计与重构方案
设计
- 应用观察者模式:订单状态作为主题,当订单状态发生变化(如创建、支付、发货等)时,通知相关模块。例如,订单创建成功后,通知库存管理模块检查库存,通知用户模块发送订单确认信息。
- 应用责任链模式:在订单支付前,通过责任链模式进行权限验证和支付条件检查。如首先检查用户登录状态,然后检查账户余额是否足够等。
重构
- 提取接口:将订单操作相关的方法提取为IOrderOperation接口,如CreateOrder、PayOrder、ShipOrder等。具体的订单处理类实现该接口,这样可以方便在不同场景下替换订单处理的具体实现。
- 提炼方法:以CreateOrder方法为例,将创建订单过程中的用户信息验证、库存检查、订单数据持久化等步骤提炼成单独的方法,如ValidateUserForCreateOrder、CheckInventoryForCreateOrder、SaveOrderData等。
// 观察者模式示例
public interface ISubject
{
void Attach(IObserver observer);
void Detach(IObserver observer);
void Notify();
}
public interface IObserver
{
void Update();
}
// 订单主题
public class OrderSubject : ISubject
{
private List<IObserver> _observers = new List<IObserver>();
public void Attach(IObserver observer)
{
_observers.Add(observer);
}
public void Detach(IObserver observer)
{
_observers.Remove(observer);
}
public void Notify()
{
foreach (var observer in _observers)
{
observer.Update();
}
}
}
// 库存观察者
public class InventoryObserver : IObserver
{
public void Update()
{
// 处理库存更新逻辑
}
}
// 责任链模式示例
public abstract class Handler
{
protected Handler _nextHandler;
public void SetNext(Handler nextHandler)
{
_nextHandler = nextHandler;
}
public abstract void HandleRequest();
}
public class LoginHandler : Handler
{
public override void HandleRequest()
{
// 处理登录验证逻辑
if (_nextHandler!= null)
{
_nextHandler.HandleRequest();
}
}
}
// 提取接口示例
public interface IWarehouse
{
void InStock(int quantity);
void OutStock(int quantity);
}
public class NormalWarehouse : IWarehouse
{
public void InStock(int quantity)
{
// 普通仓库入库逻辑
}
public void OutStock(int quantity)
{
// 普通仓库出库逻辑
}
}
// 提炼方法示例
public class OrderProcessor
{
public void CreateOrder()
{
ValidateUserForCreateOrder();
CheckInventoryForCreateOrder();
SaveOrderData();
}
private void ValidateUserForCreateOrder()
{
// 用户信息验证逻辑
}
private void CheckInventoryForCreateOrder()
{
// 库存检查逻辑
}
private void SaveOrderData()
{
// 订单数据持久化逻辑
}
}