конструкторе базовой сущности читаем из конфигурации строку подключения к БД? И дальше наследники используют её в своих конструкторах, чтобы инициализировать экземпляры классов для доступа к БД? Не, тоже не канает. Просто строки подключения мало. Надо какой-то контекст, чтобы можно было транзакционно работать с несколькими сущностями. Типа
var tran = _context.BeginTran();
await user.AddRole(role1);
await company.AddUser(user)
tran.Commit();
Ну допустим. И ссылка на контекст - в базовом классе.
2. Множественное наследование до 8 шарпа пока ещё не очень. Так что, только интерфейсы.
await company.AddUsers(user1, user2)
await company.AddDepartments(department1)
await company.AddRole(role1)
при этом
await department1.AddUsers(user1)
await role1.AddUsers(user2)
У них общий предок? Вряд ли. Скорее часть интерфейсов, которые они реализуют, пересекаются. Просто потому что реализация AddUsers у них разная.
1. Active Record, а мы уже разобрались что это плохо, нарушает все возможные принципы, но это невероятно легко использовать поначалу, по наивности 2. эти методы AddUsers возникают не на пустом месте, и понятие DRY здесь не применимо, это бизнес-логика твоего приложения, логика добавления пользователей вообще говоря может быть везде различной
Обсуждают сегодня