Как правильно использовать шаблон единицы работы
У меня есть класс 1 с какой-то простой работой, которая выглядит следующим образом :
public interface IClass1Repository { void insert(Class1 class1); } public class Class1 { public object Id { get; set; } public string Name { get; set; } } public interface IClass1Service { void Insert(Class1 class1); } public class Class1Service : IClass1Service { public IClass1Repository _repo { get; set; } public Class1Service(IClass1Repository repo) { _repo = repo; } public void Insert(Class1 class1) { if (class1 == null) throw new Exception("class1 is null"); if (string.IsNullOrWhiteSpace(class1.Name)) throw new Exception("class1 Name Cannot Be Null"); _repo.insert(class1); } }
Что я уже пробовал:
позже в процессе разработки мне пришлось добавить второй класс ведьмы, у которого есть ссылка на class1, которая выглядит следующим образом :
public interface ISecondClassRepository { void insert(SecondClass secondClass); } public class SecondClass { public object Id { get; set; } public Class1 Class1 { get; set; } // Some Other Props } public class SecondClassService { ISecondClassRepository _repo; IClass1Service _class1Service; public SecondClassService(ISecondClassRepository repo,IClass1Service class1Service) { _repo = repo; _class1Service = class1Service; } public void Insert(SecondClass secondClass) { _class1Service.Insert(secondClass.Class1); _repo.insert(secondClass); } }
проблема с приведенным выше кодом заключается в том, куда поместить транзакцию?
если я пропущу class1Service.Insert вызовите и зависите от SecondClassRepository, чтобы сделать вставку, а затем как проверить логику и проверки для Class1.
Я чувствую, что что-то не так с моим подходом, но не могу понять, что именно.
PIEBALDconsult
Умеренно.