Это зависит от архитектуры вашей системы. Это процедурная модель, модель ActiveRecord или модель предметной области? Я вижу, что вы используете DTO, так что это предполагает модель домена.
Если это так, то ваша бизнес-логика (внутри уровня «Службы») будет отвечать за организацию операций, например:
public interface PersonManager
{
void CreateNewPerson(Person person);
void DeletePerson(Person person);
void ModifyPerson(Person person);
// ... and so on .../
}
Затем PersonManager будет отвечать за проверку объекта и определение того, что с ним делать, на основе запуска метода.
Затем он перейдет на собственный уровень бизнес-логики (который может взаимодействовать с DAL), чтобы точно определить, как это должно быть достигнуто. Например, с помощью метода Modify он может запросить DAL, чтобы получить текущего нанимателя для этого лица, перейти к ModifyEmployer, если наниматель изменился, и т. Д .:
public void ModifyPerson(Person person)
{
var currentEmployer = DAL.Employers.Get(Person.Employer.EmployerID);
if (currentEmployer != person.Employer)
{
// Try and get a matching Employer from the appropriate Service (liaising with the DAL)
var employer = EmployerManager.GetEmployer(person.Employer.EmployerID);
if (employer == null)
{
// ... Create a new employer
}
else if (employer != person.Employer)
{
// ... Update existing employer
}
}
// ... Now go ahead and handle any changes to the person
}
Сверх того, я не могу придумать какой-либо конкретный пакет, чтобы справиться с этим для вас, в общем, я бы сказал, что это все в архитектуре вашей системы и как BL разговаривает с DAL, но я конечно, один из мозговых блоков здесь предложит несколько лучших предложений:)
Надеюсь, это немного поможет!
К.