Информация об изменениях

Сообщение Использование интерфейсов для бизнес-объектов от 27.09.2017 2:21

Изменено 27.09.2017 2:22 Shmj

Использование интерфейсов для бизнес-объектов
Если в вашем проекте бизнес-объекты определены в виде классов, то при передаче из одного слоя в другой
Автор: Shmj
Дата: 26.09.17
происходит двойное преобразование. Сначала вы преобразовываете объекты слоя A к объектам общего вида (которые определены в контрактах), затем из объектов общего вида преобразуете к объектам слоя Б.

А если вы юзаете интерфейсы без конкретных реализаций -- то будет одно преобразование, так как объект любого слоя в одну сторону преобразовывается к интерфейсу автоматически.

В мире Java такая схема более распространена. А вот в .Net интерфейсы создают только для сервисов а бизнес-объекты выполняются в виде классов. Даже в том же Guidelines есть рекомендация:

DO NOT use weakly typed collections in public APIs. +
The type of all return values and parameters representing collection items should be the exact item type, not any of its base types (this applies only to public members of the collection). 1


Т.е. для коллекций рекомендуют возвращать конкретный тип, а не базовый или интерфейс. Почему же? В чем минус? Ведь один хрен между слоями происходит копирование.
Использование интерфейсов для бизнес-объектов
Если в вашем проекте бизнес-объекты в контрактах определены в виде классов, то при передаче из одного слоя в другой
Автор: Shmj
Дата: 26.09.17
происходит двойное преобразование. Сначала вы преобразовываете объекты слоя A к объектам общего вида (которые определены в контрактах), затем из объектов общего вида преобразуете к объектам слоя Б.

А если вы юзаете интерфейсы без конкретных реализаций -- то будет одно преобразование, так как объект любого слоя в одну сторону преобразовывается к интерфейсу автоматически.

В мире Java такая схема более распространена. А вот в .Net интерфейсы создают только для сервисов а бизнес-объекты выполняются в виде классов. Даже в том же Guidelines есть рекомендация:

DO NOT use weakly typed collections in public APIs. +
The type of all return values and parameters representing collection items should be the exact item type, not any of its base types (this applies only to public members of the collection). 1


Т.е. для коллекций рекомендуют возвращать конкретный тип, а не базовый или интерфейс. Почему же? В чем минус? Ведь один хрен между слоями происходит копирование.