私は Entity Framework を使用しており、次のようなエンティティがあります。
public class User : IEntity
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
[Required]
public String Email { get; set; }
public virtual ICollection<Project> UserProjects { get; set; }
}
public class Project : IEntity
{
[Key]
public int ProjectId { get; set; }
public String Title { get; set; }
public String Description { get; set; }
[ForeignKey("UserOwner")]
public int UserOwnerId { get; set; }
public virtual User UserOwner { get; set; }
}
また、Repository パターンと Unit Of Work パターンも使用します。たとえば、プロジェクト リポジトリのみを含むプロジェクト ロジック クラスにメソッド CreateProject(String title, String description, String userOwnerEmail) があります。また、メールでユーザーを取得できる UserLogic クラスもあります。
CreateProject メソッドでメールでユーザーを取得して、プロジェクト所有者のように指定する方法を教えてください。
主な目的は、疎結合メソッドを作成することです。
この例は悪いと思います:
public void CreateNewProject(String projectName, String description,String usersEmail)
{
var usersLogic = kernel.Get<IUsersServices>();
User owner = usersLogic.GetUserByEmail(usersEmail);
unit.Repository<Project>()
.Insert(new Project
{
Title = projectName,
Description = description,
CreationDate = DateTime.Now,
UserOwner = owner,
UsersIncludeedInProject = new List<User>()
});
unit.Save();
}