Я занимаюсь разработкой программного обеспечения, в котором есть несколько объектов, таких как:
public class Workspace
{
public int ID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public virtual List<Playground> Playground { get; set; }
public virtual List<Workspace> Children { get; set; }
public virtual List<Member> Members { get; set; }
public virtual Workspace Parent { get; set; }
}
public class Playground
{
public int ID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public virtual List<Service> Services { get; set; }
public virtual Workspace Workspace { get; set; }
}
public class Service
{
public int ID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public virtual Playground Playground { get; set; }
}
Это мои объекты EF4 POCO. Я использую шаблон репозитория и следующий интерфейс:
public interface IRepository<T>
{
void Add(T entity);
void Delete(T entity);
IEnumerable<T> Get(Expression<Func<T, bool>> expression);
IEnumerable<T> Get();
void Attach(T entity);
int Save();
}
Репозитории имеют внутренний ObjectContext. У меня есть UnitOfWork, который содержит экземпляры моих репозиториев и отвечает за сохранение внесенных в них изменений.
Пока я делаю это правильно?
Я реализую уровень бизнес-логики следующим образом:
public class DomainWorkspaceService : DomainServiceBase
{
public DomainWorkspaceService(Workspace workspace)
: base(UnitOfWorkFactory.GetInstance())
{
}
public void Create(Workspace workspace)
{
UoW.GetRepository<Workspace>().Add(workspace);
}
public void Delete(Workspace workspace)
{
var pservice = new DomainPlaygroundService();
foreach (var playground in workspace.Playground)
pservice.Delete(playground);
foreach (var child in workspace.Children)
Delete(child);
}
}
Теперь я не уверен, что иду в правильном направлении. Мои POCO отвечают (будут) за проверку и позволят мне сделать что-то вроде
SomeWorkspace.Children.Add(new Workspace {...});
Поскольку эти объекты связаны с контекстом, при сохранении их изменения в коллекциях также будут сохраняться в базе данных?
Кроме того, я хочу, чтобы мои игровые площадки не могли быть созданы без рабочего пространства и служб без игровой площадки. Где я должен создать и удалить их?
Спасибо.