Breeze:EFContextProvider/Breeze控制器和服务层
使用Breeze时,我想知道如何将其与处理电子邮件通知、审核日志、业务验证(即客户必须存在)等事务的服务层集成 例如,给定以下场景:Breeze:EFContextProvider/Breeze控制器和服务层,breeze,asp.net-web-api,service-layer,Breeze,Asp.net Web Api,Service Layer,使用Breeze时,我想知道如何将其与处理电子邮件通知、审核日志、业务验证(即客户必须存在)等事务的服务层集成 例如,给定以下场景: public class SalesAppRepository { private readonly EFContextProvider<SalesAppContext> _contextProvider; public SalesAppRepository(EFContextProvider<SalesAppContext&g
public class SalesAppRepository
{
private readonly EFContextProvider<SalesAppContext> _contextProvider;
public SalesAppRepository(EFContextProvider<SalesAppContext> contextProvider)
{
_contextProvider = contextProvider;
}
private SalesAppContext Context { get { return _contextProvider.Context; } }
public string MetaData
{
get { return _contextProvider.Metadata(); }
}
public SaveResult SaveChanges(JObject saveBundle)
{
return _contextProvider.SaveChanges(saveBundle);
}
public IQueryable<Customer> Customers
{
get { return Context.Customers; }
}
public IQueryable<Order> Orders
{
get { return Context.Orders; }
}
/* Other entities */
}
[BreezeController]
public class BreezeController : ApiController
{
private readonly SalesAppRepository _repository;
public BreezeController(SalesAppRepository repository)
{
_repository = repository;
}
[HttpGet]
public string Metadata()
{
return _repository.MetaData;
}
[HttpPost]
public SaveResult SaveChanges(JObject saveBundle)
{
return _repository.SaveChanges(saveBundle);
}
[HttpGet]
public IQueryable<Customer> Customers()
{
return _repository.Customers;
}
[HttpGet]
public IQueryable<Order> Orders()
{
return _repository.Orders;
}
/* Other entities */
}
公共类SalesAppLocatory
{
私有只读EFContextProvider\u contextProvider;
public SalesApprovitory(EFContextProvider contextProvider)
{
_contextProvider=contextProvider;
}
私有SalesAppContext上下文{get{return\u contextProvider.Context;}}
公共字符串元数据
{
获取{return _contextProvider.Metadata();}
}
public SaveResult SaveChanges(JObject saveBundle)
{
return\u contextProvider.SaveChanges(saveBundle);
}
公众可查询客户
{
获取{return Context.Customers;}
}
公共可撤销命令
{
获取{return Context.Orders;}
}
/*其他实体*/
}
[BreezeController]
公共类控制器:ApiController
{
私有只读SalesAppLocatory存储库;
公共BreezeController(SalesAppLocatory存储库)
{
_存储库=存储库;
}
[HttpGet]
公共字符串元数据()
{
返回_repository.MetaData;
}
[HttpPost]
public SaveResult SaveChanges(JObject saveBundle)
{
return\u repository.SaveChanges(saveBundle);
}
[HttpGet]
公众可查询客户()
{
返回_repository.Customers;
}
[HttpGet]
可供查询的公共订单()
{
返回_repository.Orders;
}
/*其他实体*/
}
在创建、修改实体时,我有一些其他业务逻辑。。例如,创建订单时;客户必须能够下订单(bool valuecanOrder
),并且必须存在,还必须发送电子邮件并更新审核日志以显示新创建的订单。这只是一个场景,在我的服务层中通常存在其他情况,但我不确定如何将其与breeze结合起来
我知道我可以覆盖SalesAppContext
上的SaveChanges
方法来生成审核日志,但其他情况如何?我不确定我会把这个放在什么地方
编辑
我似乎已经找到了一种解决这个问题的方法,尽管这种方法很粗糙,但我上传了一个要点,希望能够帮助他人或改进:我已经将我的业务逻辑合并到beforeSaveEntities(…)方法中:
如何确定传入的实体,然后根据该实体进行验证?如果你有很多实体,那么这个方法可能会变得非常混乱?请看我在这里的片段:也许有人有一个如何重构它的技巧,这样它就不会变得那么混乱…看起来不错。如果我的项目越来越大,我会考虑这种方法。谢谢分享:)