Стоит ли создавать идентичный класс отображения только для того, чтобы избежать зависимостей? - PullRequest
0 голосов
/ 03 ноября 2019

База данных документов, такая как MongoDb, позволяет вам использовать ваши бизнес-объекты напрямую посредством атрибутов атрибутов для полей / свойств, как показано ниже.

public class Book
{
    [BsonId]
    [BsonRepresentation(BsonType.ObjectId)]
    public string Id { get; set; }

    [BsonElement("Name")]
    public string BookName { get; set; }

    public decimal Price { get; set; }

    public string Category { get; set; }

    public string Author { get; set; }
}

Здесь атрибут [BsonId] указывает первичный ключ MongoDb. Хотя это может быть как гибкость, это очень специфично для MongoDb. Теперь класс Book становится зависимым и от библиотек MongoDb. Поскольку различные проекты (проекты в .net, пакеты в Java и т. Д.) Используют вышеуказанный класс Book, они также становятся зависимыми от библиотек MongoDb, что, в свою очередь, нарушает слабую связь между проектами.

Учитывая фон,Стоит ли создавать идентичный класс отображения только для того, чтобы избежать зависимостей (или использовать такие инструменты, как Automapper https://automapper.org или http://dozer.sourceforge.net/ для Java)?

Стоит ли дополнительной сантехники против нарушения принципов слабой связи подсистем и принципа единой ответственности?

1 Ответ

0 голосов
/ 03 ноября 2019

Book класс зависит от MongoDb во время компиляции. Однако, поскольку вы использовали только атрибуты из MongoDb, Book не зависит от MongoDb во время выполнения.

Это означает, что когда объектный код для Book загружен в CLR, и если dll MongoDb не найден, вы не получите TypeLoadException. В C # (также в Java), когда dll, где определен атрибут, не найден во время загрузки, нет исключения. Атрибут dll будет загружен по желанию, когда найден.

Таким образом, это означает, что вы можете использовать книгу в среде, где MonogoDb не может быть загружен. Вы можете распространять dll-содержащую книгу без зависимости от MongoDb. Зависимость существует только во время компиляции, и об этой зависимости определенно заботятся, если вы кодируете компиляцию.

Теперь иметь идентичный класс без атрибута было бы слишком большой работой для почти ничего.

...