我需要为现有的MVC应用程序提供全新的界面。很多都是一样的,很多都会有所不同。我已经想到了四种方法,但我真的不喜欢它们。
有人可以为选择一个选项提供良好的基础吗?
两个应用程序:我们创建了一个全新的MVC应用程序,新域(或子域),新的一切。我们可能使用相同的数据访问库,但就Web界面而言,它们是完全独立的。
MVC领域:我们使用相同的应用程序,但创建员工区域和客户区域。我们使用某种类型的基于角色的路由来决定请求属于哪个区域。
条件控制器语句:我们检查每个控制器方法中的请求,并决定要返回的数据。
部分视图:一个应用,一个区域。我们在视图中放置了条件检查来决定要呈现的部分(客户1或员工1)。
我们在业务中使用一个有效的MVC 3应用程序来满足我们的所有办公室管理需求。它包括员工时间,采购订单,客户管理和历史等功能。我们的客户很乐意看到他们的购买历史,报告他们花了多少钱,等等。我们显然不会想要打开我们的系统。它有很多我们不希望他们看到的内部数据,我们不希望他们能够修改任何内容。
答案 0 :(得分:0)
为什么不在不同的项目中拆分解决方案?
我喜欢使用代理模式。
在我的解决方案中,我有三个项目:
我想这张图片可能会有所帮助:
使用这种方法,您可以在代理项目中拥有不同的存储库,您可以在它们之间进行交换。当我们进行单元测试时,或者当我们需要使用缓存的存储库时,它非常有用。
public abstract class Repository<T>
{
public abstract T GetById(int id);
}
使用此单元进行单元测试
public class CustomerRepository : Repository<CustomerEntity>
{
public override CustomerEntity GetById(int id)
{
return new CustomerEntity()
{
Id = id,
Name = "Customer " + id
};
}
}
当您需要访问外部服务时使用此
public class RemoteOrderRepository : Repository<OrderEntity>
{
public override OrderEntity GetById(int id)
{
// You can access your external service here
}
}
使用这个来利用缓存
public class CachedOrderRepository : RemoteOrderRepository
{
public override OrderEntity GetById(int id)
{
string cacheKey = "Order" + id;
var entity = MemoryCache.Default[cacheKey] as OrderEntity;
if(entity == null)
{
entity = base.GetById(id);
var cacheItem = new CacheItem(cacheKey, entity);
var policy = new CacheItemPolicy();
MemoryCache.Default.Add(cacheItem, policy);
}
return entity;
}
}