Этот контейнер службы / репозитория в порядке?
Класс RepositoryContainer
содержит "SurveyRepository" - но не должен ли SurveyRepository быть экземпляром RepositoryContainer?То же самое для ServiceContainer
и "SurveyService".Для меня было бы больше смысла, если бы они были (хотя трудно точно прокомментировать, не будучи более знакомыми с проектом).
Тогда у вас будет: ServiceContainer SurveyService = new ServiceContainer(..);
Как у вас естьу меня складывается впечатление, что SurveyService - это конкретная бизнес-концепция, но она заключена в более общий тип (ServiceContainer);то же самое для SurveyRepository / RepositoryContainer.
Это нарушит SRP , Общий принцип закрытия и, вероятно, Общий принцип повторного использования .
Я не уверен, что думают другие, но я также не фанат именования экземпляров после их типов (кроме самых простых из senarios - что это не так): public SurveyRepository SurveyRepository
Имя типа должно отражать то, чтотип (или делает), который будет отличаться от конкретного его экземпляра (например, ServerContainer и ServeyService).
У меня уже есть уровень службы, так как у меня есть служба wcf, которую я называютекущий сервисный обертка сервисного уровня или что-то?
и
Так что мне нужно изменить имя моего сервисного (BL) слоя на что-то сервисное обертка или что-то, затем в wcfуровень обслуживания Я определяю методы в репозитории и сервисе, затем просто вызываю соответствующие методы в сервисе, репозиторий
Обычно любой BL многократного использования должен находиться в автономном режиме.пакет и не заключенный (например, «жестко запрограммированный») в сервисный уровень или сервис WCF и т. д. Затем вы создадите конечные точки сервиса, расположенные поверх BL.Если у вас есть бизнес-транзакции, которые охватывают разные бизнес-объекты в разных пакетах , то вам нужно поместить этот более высокий уровень оркестровки где-то выше - я думаю, это может пойти на уровне сервиса, но это не тривиальныйчто нужно сделать, вам нужно тщательно продумать, в чем заключаются определенные обязанности.
Если транзакция обрабатывает различные бизнес-объекты в одном и том же пакете 1040 *, тогда оркестровка намного проще и может быть выполнена с помощьюдругой тип BL, предназначенный для выполнения этой работы, который будет частью этого пакета, а не на уровне обслуживания.
Что касается именования - перейдите к доске и сопоставьте все, а затем переименуйте все, как требуется.По крайней мере, с помощью одного связного обзора вы сможете разобраться во всем.
BL-пакеты должны быть названы в соответствии с тем, что они делают - с точки зрения бизнеса.Службы WCF, которые обертывают их, должны иметь подходящее имя, которое может включать ссылку на тип используемого канала (JSON, WebService и т. Д.).Поскольку вы можете изменить канал, который служба WCF использует при помощи конфигурации (если служба спроектирована правильно), это может быть не очень хорошей идеей, но если предположить, что это не так, то может помочь дополнительная ясность.
Эти статьиможет помочь:
Мне нужно самому вызывать методы репозитория, например: GetCategory () и т. Д., А также все методы на уровне сервисов, поэтому мне нужно обернуть и методы, и сервис в сервис wcf,Это нормально?
Завершение службы в службу звучит немного подозрительно.Только внешние абоненты должны проходить через сервисы - при условии, что сервисы предназначены для предоставления BL сторонним лицам.Внутренние абоненты должны знать, какой метод следует вызывать (поскольку он является внутренним), возможно, это тот же метод, который предоставляется службой.
Где выполнять кэширование?поскольку я использую EF, я думаю, что есть какой-то способ использовать провайдер кеша с EF
Я не знаю, можете ли вы кешировать в EF4, но меня это не удивит, если вы сможете. Где делать кеширование? - Это зависит от того, в каком месте пробита бутылка, которую вы пытаетесь устранить.
В вашем RepositoryContainer поле _SurveyRepository является открытым - не должно ли оно быть приватным? В противном случае, почему свойство SurveyService доступно только для чтения (get)?
public SurveyRepository _SurveyRepository;