在架构设计中,可以通过隔离可变性来将应用程序中的内部服务进行分割,划分为可变组件和不可变组件。不可变组件不修改任何状态,而可变组件则负责修改变量状态并与不可变组件进行通信。
假设我们正在设计一个电子商务平台,其中包含以下两个组件:ProductCatalog(产品目录)和ShoppingCart(购物车)。ProductCatalog负责管理产品的信息和库存,而ShoppingCart负责管理用户的购物车内容。
class ProductCatalog
{
public:
std::vector<Product> getProducts() const
{
// 返回产品目录中的产品列表
}
bool checkAvailability(const Product& product) const
{
// 检查产品的库存是否可用
}
};
class ShoppingCart
{
private:
std::vector<Product> items;
public:
void addItem(const Product& product, const ProductCatalog& catalog)
{
// 检查产品库存是否可用
if (catalog.checkAvailability(product))
{
// 将产品添加到购物车中
items.push_back(product);
}
}
void removeItem(const Product& product)
{
// 从购物车中移除产品
// 修改购物车的状态
}
std::vector<Product> getItems() const
{
// 返回购物车中的产品列表
}
double getTotalPrice() const
{
// 计算购物车中产品的总价格
}
};
int main() {
ProductCatalog catalog;
ShoppingCart cart;
// 获取产品列表
std::vector<Product> products = catalog.getProducts();
// 将产品添加到购物车中
for (const auto& product : products) {
cart.addItem(product, catalog);
}
// 获取购物车中的产品列表
std::vector<Product> cartItems = cart.getItems();
// 输出购物车中的产品信息
for (const auto& item : cartItems) {
std::cout << item.getName() << std::endl;
}
return 0;
}