【发布时间】:2011-03-19 17:32:50
【问题描述】:
我需要 Silverlight、asp.net 等中的表示层,所以一切都通过 wcf 服务。 我对存储库层、服务层、wcf 服务的实现有很多疑问
我现在做的事情
- 我有存储库,它不是按表创建的,而是按聚合根创建的
- 我有服务层用于执行涉及多个存储库的一组操作
- WCF 服务将方法封装在服务层和存储库层
- 实体由 EF 自动生成
- 实体作为完整图传递并返回到服务层
6.我有两个包含所有存储库的具体类,以及称为存储库容器和服务容器的服务,存储库容器被传递给服务
我的存储库基础
public class RepositoryBase
{
public DataBaseContext _Context;
public RepositoryContainer _RepositoryContainer;
public RepositoryBase(RepositoryContainer repositoryContainer)
{
_RepositoryContainer = repositoryContainer;
_Context = repositoryContainer.Context;
}
public RepositoryBase()
{
_RepositoryContainer = new RepositoryContainer();
_Context = _RepositoryContainer.Context;
}
}
我的仓库容器
public class RepositoryContainer
{
public RepositoryContainer()
{
Context = new DataBaseContext();
}
public RepositoryContainer(DataBaseContext context)
{
Context = context;
}
public DataBaseContext Context
{
get;
set;
}
public SurveyRepository _SurveyRepository;
public SurveyRepository SurveyRepository
{
get
{
return _SurveyRepository ?? (_SurveyRepository = new SurveyRepository(this));
}
}
}
我的服务容器
public class ServiceContainer
{
public ServiceContainer()
{
RepositoryContainer = new RepositoryContainer();
}
public ServiceContainer(RepositoryContainer container)
{
RepositoryContainer = container;
}
public RepositoryContainer RepositoryContainer
{
get;
set;
}
public SurveyService _SurveyService;
public SurveyService SurveyService
{
get
{
return _SurveyService?? (_SurveyService= new SurveyService(this));
}
}
}
做一个操作 我只是创建 RepositoryContainer 或 ServiceContainer
然后调用
RepositoryContainer.Repository.Method()
ServiceContainer.Service.Method()
我的疑惑是
那个服务/存储库容器好吗?
我已经有了服务层,所以我有 wcf 服务,我称之为当前服务层 servicewrapper 什么的?
-
我需要自己调用存储库方法,例如:GetCategory() 等,还有服务层中的所有方法,所以我需要将方法和服务都包装在 wcf 服务中,可以吗?
李> 在哪里进行缓存?当我使用 EF 时,我认为有办法将缓存提供程序与 EF 一起使用,
【问题讨论】:
-
- 客户端可以直接访问单个 WCF 方法,或者通过服务层(将一个或多个 WCF 方法“聚合”成一个更大/更复杂的“方法” - 对吗? - 缓存:做你有性能问题吗?如果是 - 在哪里? - ServiceContainer 和 RepositoryContainer 有什么区别?
-
存储库确实像 GetCategories、插入删除等,操作 / BL 在服务中完成,例如:我有用户存储库、调查存储库,当我更新调查时,我更新用户中的一个字段(逻辑) ,所以它在surveyservice中处理,它调用用户和调查存储库方法,只是我的存储库不包含逻辑,所有逻辑都包装到服务层中,而不是创建每个存储库实例,而是全部包装到存储库容器中,所以我只是需要创建存储库容器(创建它的实例并不昂贵),
-
服务同理,在创建服务容器时传递repository容器,然后传递给每个服务实例,所以在每个服务中不需要创建每个repository实例,注意:我不是国际奥委会的粉丝。问题是,我喜欢当前不使用 WCF 所做的事情,这意味着所有内容都驻留在单个服务器中,我需要单独的应用服务器 (BL),如果它们全部放在一起,我只是引用核心 dll,创建存储库容器实例,服务容器调用方法,现在我需要 WCF
-
我需要通过 WCF 调用存储库和服务,所以我需要将我的服务(BL)层的名称更改为服务包装器或其他东西,然后在 wcf 服务层中定义存储库和服务中的方法然后只是在服务、存储库中调用相应的方法,我对我所做的事情感到困惑,
标签: c# wcf entity-framework architecture