У меня есть несколько примечаний к вашим требованиям:
Служба WCF, реализация
используя EF для подключения к SQL Server
хранилище данных (это, вероятно, в конечном итоге
имея много сотен столов и все
другие принадлежности комплекса
Система БД)
Собираетесь ли вы строить только уровень доступа к данным, представленный как набор служб WCF, или сложную бизнес-логику, представленную как службы WCF? Это сильно повлияет на остальные ваши требования. Если вы хотите сделать первый случай, проверьте службы данных WCF. В последнем случае проверьте мои другие заметки.
Базовые классы, используемые для EF и WCF
должен быть расширяемым как на имущество
и уровень класса (то есть поля и записи),
для проверки, безопасности, высокого уровня
Аудит и другая пользовательская логика
Разделите ваши классы данных на два набора. Внутренне ваши сервисы будут использовать классы POCO, реализованные как объекты домена. Доменные объекты будут материализованы / сохранены EF (вам нужен .NET 4.0), и они также будут содержать собственную логику. Если вы хотите создать сложный бизнес-уровень, вам также следует подумать о доменно-ориентированном дизайне = репозитории, совокупные корни и т. Д.
Базовые классы такие же, как
на стороне сервера, но с некоторыми из
настройки отсутствуют
Вторым набором классов данных будут объекты передачи данных, которые будут доступны службам WCF и будут использоваться сервером и клиентами. Ваши доменные объекты будут преобразованы в DTO при отправке данных клиенту, а DTO будут преобразованы в доменные объекты при возврате из клиента.
Ваши сервисы WCF должны быть построены на основе бизнес-логики - доменные объекты / доменные сервисы. Службы WCF должны предоставлять короткие интерфейсы (вместо диалоговых CRUD-интерфейсов), где DTO передает данные из нескольких операций домена. Это также поможет вам повысить производительность, сократив количество циклов между клиентом и сервисом.
Когда объект обновляется на
клиент, желательно только модифицированный
свойства должны быть отправлены
Сервер
Я думаю, что это достижимо только путем правильного определения DTO или, возможно, некоторой пользовательской сериализации.
Эффективность сети важна,
поскольку мы не хотим этого делать
* в * эффективно с первого дня - я могу предвидеть трафик данных и сервер
рабочая нагрузка растет в геометрической прогрессии
в течение нескольких лет
Как уже упоминалось, вы должны спроектировать свой сервис так, чтобы он был готов к балансировке нагрузки, и вам также следует подумать о кэшировании (распределенном) - проверьте AppFabric. Хорошая идея - использовать службы без сохранения состояния.
База данных разрабатывается первой, поэтому
классы (POCO, C #), сгенерированные EF
будет основываться на этом.
Это кажется простым требованием, но вы можете легко смоделировать базу данных, которую будет сложно использовать с Entity Framework.
Главный совет:
Ваш проект выглядит большим и сложным, поэтому первое, что вы должны сделать, это нанять разработчиков, имеющих опыт работы с WCF, EF и т. Д. У каждой из этих технологий есть свои подводные камни, поэтому использовать их в таких масштабах действительно без риска опытные люди.