Добавление свойства в класс из другой сборки - PullRequest
0 голосов
/ 16 октября 2018

У меня есть .NET решение, которое следует за Onion Architecture.

В соответствии с рекомендациями этого типа архитектуры, слой Core, где находятся мои сущности, должен быть абстрактным и не ссылаться на какую-либо внешнюю библиотеку.

Я также хочу подключиться кMongoDb база данных, которая требует, чтобы атрибут Id сущности имел тип ObjectId, который является типом Монго.

namespace MyApp.Core.Entities.Base
{
  using System;
  **using MongoDB.Bson;** // This is an external library that should not be referenced by Core

  public class BaseEntity
  {
     public **ObjectId** Id { get; set; }
     public DateTime? CreationDate { get; set; }
  }
}

Так что, если я добавлю этот тип атрибута к сущности в Ядреслой, это будет означать, что мне придется ссылаться на MongoDb внутри моего базового слоя, и это будет нарушением руководящих принципов Onion Architecture.Я полагаю, что моим решением было бы создать какой-то частичный класс за пределами слоя Core (что невозможно), внутри которого я добавлю свое свойство ObjectId.

Любая идея о том, как мне этого добиться.

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Вам необходимо определить Id вашей базовой сущности как тип object.

public class BaseEntity
  {
     public object Id { get; set; }
     public DateTime? CreationDate { get; set; }
  }

При этом вы можете иметь любой тип идентификатора в БД, и ваш адаптер АБ должен иметь возможность преобразовать BaseEntity Id в целевой тип.

Это поможет вам не только сохранить целостность вашей архитектуры с MongoDb, но и любой тип столбца DB / ID, который вы можете использовать в будущем.

Надеюсь, это поможет!

0 голосов
/ 16 октября 2018

"В соответствии с рекомендациями этого типа архитектуры, слой Core, где находятся мои сущности, должен быть абстрактным и не ссылаться на какую-либо внешнюю библиотеку.

Я также хочу подключиться к базе данных MongoDb, для которой требуетсячто атрибут Id объекта должен иметь тип ObjectId, который является типом Монго. "

Это оставляет вам два варианта:

  1. Игнорировать правило в этом случае.Может быть, вы могли бы сделать что-то с Generics.
  2. Сделать класс адаптера базы данных, который не является частью основных библиотек.

Вариант 2 - это то, что я всегда советую.Всегда делайте класс DatabaseAdapater.Используйте один экземпляр во всем проекте.Если вам когда-либо понадобится поддерживать другую DMBS, это так просто, как: Извлечь интерфейс / Абстрактный класс -> Написать новый вариант -> изменить экземпляр в одной точке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...