Я пишу клиент-серверное приложение, где клиент — это приложение Windows Forms, а сервер — служба WCF, размещенная в службе Windows. Обратите внимание, что я контролирую обе стороны приложения.
Я пытаюсь реализовать практику кодирования интерфейса: т.е. у меня есть общая сборка, на которую ссылается клиентское приложение. Этот проект содержит мои сервисные контракты WCF и интерфейсы, которые будут доступны клиентам. Я пытаюсь предоставлять клиентам только интерфейсы, чтобы они зависели только от контракта, а не от какой-либо конкретной реализации. Одна из причин этого заключается в том, что я могу реализовать свою службу и изменить домен в любое время без необходимости повторной компиляции и повторного развертывания клиентов. Интерфейсы/контракты в этом случае не изменятся. Мне нужно только перекомпилировать и повторно развернуть мою службу WCF.
Проблема дизайна, с которой я сталкиваюсь сейчас, заключается в следующем: на клиенте, как мне создавать новые экземпляры объектов, например. ICustomer
, если клиент не знает о Customer
конкретной реализации? Мне нужно создать нового клиента для сохранения в БД.
Использую ли я внедрение зависимостей или класс Factory для создания экземпляров новых объектов, или я должен просто разрешить клиенту создавать новые экземпляры конкретных реализаций?
Я не использую TDD, и обычно у меня будет только одна реализация ICustomer
или любого другого открытого интерфейса.