StudentService Æäʵ±ä»¯²»´ó£¬Ö»Êǽ«ÔÀ´µÄ unitOfWork Ìí¼ÓÐ޸IJÙ×÷£¬¸Ä³ÉÁË studentRepository ºÍ _teacherRepository£¬Ö´ÐÐÏ StudentService.Add µÄµ¥Ôª²âÊÔ´úÂ룬·¢ÏÖÖ´Ðв»Í¨¹ý£¬ÎªÊ²Ã´ÄØ£¿ÒòΪ Repository ºÍ UnitOfWork µÄ IDbContext ²»ÊÇͬһ¸ö¶ÔÏó£¬Ìí¼ÓÐ޸ĶÔÏóͨ¹ý Repository ×¢²áµ½ IDbContext ÖУ¬×îºó UnitOfWork Ö´ÐÐ Commit È´ÊÇÁíÒ»¸ö IDbContext£¬ËùÒÔÎÒÃÇÐèҪȷ±£ Repository ºÍ UnitOfWork ¹²ÏíÒ»¸ö IDbContext ¶ÔÏó£¬ÔõôʵÏÖÄØ£¿
ÎÒÃǽøÐиÄÔìÏ£º
namespace DDD.Sample.Application { public class StudentService : IStudentService { private IDbContext _dbContext; private IUnitOfWork _unitOfWork; private IStudentRepository _studentRepository; private ITeacherRepository _teacherRepository; public StudentService(IDbContext dbContext) { _dbContext = dbContext; } public Student Get(int id) { _studentRepository = new StudentRepository(_dbContext); return _studentRepository.Get(id); } public bool Add(string name) { _unitOfWork = new UnitOfWork(_dbContext); _studentRepository = new StudentRepository(_dbContext); _teacherRepository = new TeacherRepository(_dbContext); var student = new Student { Name = name }; var teacher = _teacherRepository.Get(1); teacher.StudentCount++; _studentRepository.Add(student); _teacherRepository.Update(teacher); return _unitOfWork.Commit(); } } }ÉÏÃæ¶ÔÓ¦µÄ²âÊÔ´úÂëÖ´ÐÐͨ¹ý£¬Æäʵ½â¾ö·½Ê½ºÜ¼òµ¥£¬¾ÍÊÇÊÖ¶¯¸ø UnitOfWork¡¢StudentRepository ºÍ TeacherRepository ×¢ÈëÏàͬµÄ IDbContext ¶ÔÏ󣬵±È»ÕâÊÇÒ»ÖÖ½â¾ö·½Ê½£¬»¹ÓÐÈËϲ»¶ÓÃÊôÐÔ×¢È룬Õâ¶¼ÊÇ¿ÉÒԵģ¬ÎÞ·Ç×îºó¾ÍÊÇÏëÈà Repository ºÍ UnitOfWork ¹²ÏíÒ»¸ö IDbContext ¶ÔÏó¡£
±¾ÆªµÄÏà¹Ø´úÂëÒÑÌá½»µ½ GitHub£¬´ó¼Ò¿ÉÒԲο¼Ï£ºhttps://github.com/yuezhongxin/DDD.Sample
3. ×ܽáÈýÖÖÉè¼Æ·½°¸¹ØÓÚ Repository¡¢IUnitOfWork ºÍ IDbContext µÄÉè¼Æ£¬ÒÔ¼° Application Service µÄµ÷Óã¬ÎÒ×ܽáÁËÈýÖÖÉè¼Æ·½Ê½£¬ÎÒ¾õµÃÒ²ÊÇÎÒÃdz£Óõļ¸ÖÖ·½Ê½£¬ÏÂÃæÎÒ´óÖ·ֱð˵Ï¡£
1. IUnitOfWork -> EfUnitOfWork -> Repository -> Application ServiceÕâÖÖÉè¼ÆÓ¦¸ÃÎÒÃÇ×îÊìϤ£¬ÒòΪÎÒÃÇÒ»¿ªÊ¼¾ÍÊÇÕâÑùÉè¼ÆµÄ£¬µ«ÎÊÌâÒ²ÊÇ×î¶àµÄ£¬Òª²»È»ÎÒÒ²²»»áдÉÏһƪ²©ÎÄÁË£¬±ÈÈç´æÔÚµÄÎÊÌ⣺
ÉÏһƪ²©ÎÄ×îºó·ÖÎö³öÀ´ÊÇ IUnitOfWork µÄÉè¼ÆÎÊÌ⣬ÒòΪËü×öÁËÌ«¶àµÄÊ£¬²¢ÇÒ Repository ÒÀÀµÓÚ IUnitOfWork£¬ÒÔÖÁÓÚ×îºóÔÚ Application Service µÄµ÷ÓÃÖУ¬Repository ÏԵ÷dz£¶àÓ࣬ÕâÖÖÉè¼Æ×î´óµÄÎÊÌâ¾ÍÊÇÖ°Ôð²»Ã÷È·¡£
2. IDbContext -> IUnitOfWork/IRepository(only query) -> UnitOfWork/Repository -> Application ServiceµÚ¶þÖÖÉè¼ÆÊÇÎұȽÏÇãÏòÓڵģ¬ÒòΪµÚÒ»ÖÖÉè¼Æ³öÏÖµÄÎÊÌ⣬ËùÒÔÎÒ¶Ô IUnitOfWork µÄÉè¼Æ·Ç³£¿´ÖØ£¬²¢ÇÒÎÒ¶ÁÁË¡¶ÆóÒµÓ¦Óüܹ¹Ä£Ê½¡·ÖйØÓÚ UnitOfWork µÄËùÓÐÄÚÈÝ£¬Æäʵ¾ÍÄÇô¼¸¸ö×Ö¿ÉÒÔ¸ÅÀ¨£ºÎ¬»¤¶ÔÏó״̬£¬Í³Ò»Ìá½»¸ü¸Ä¡£ÎÒ¸öÈ˾õµÃ¼Ü¹¹Éè¼Æ×îÖØÒªµÄµØ·½¾ÍÊǵײã½Ó¿ÚµÄÉè¼Æ£¬¾ÍÏñÎÒÃǸÇÒ»¶°Ä¦Ìì´óÂ¥£¬Èç¹ûµØ»ù´ò²»ÎÈ£¬×îºóµÄ½á¹û¿Ï¶¨ÊÇ¿åËú£¬ËùÒÔ£¬ÎұȽϼá³Ö IUnitOfWork ÕâÑùµÄÉè¼Æ£º
Ïà¶ÔÓÚµÚÒ»ÖÖÉè¼Æ£¬ÕâÖÖÉè¼Æ»¹ÓÐÒ»¸ö²»Í¬¾ÍÊÇ IUnitOfWork ºÍ IRepository Ϊƽ¼¶¹ØÏµ£¬ÎªÊ²Ã´ÕâÑùÉè¼Æ£¿ÒòΪÎÒÃDz»ÄÜͨ¹ý IUnitOfWork Ìṩ²éѯ²Ù×÷£¬²¢ÇÒ IUnitOfWork ºÍ ORM Ҳûʲô¹ØÏµ£¬ËùÒÔÎÒÃÇ×îºó³éÀë³öÀ´Ò»¸ö IDbContext£¬²¢ÇÒÓà EF ȥʵÏÖËü¡£
IRepository Ö»Óвéѯ£¬ÕâÊÇÎÒÃǵ͍Ò壬ÔÚ Application Service µÄµ÷ÓÃÖУ¬¶ÔÏóµÄÐÂÔöºÍÐ޸ͼÊÇͨ¹ý IUnitOfWork ½øÐÐʵÏֵģ¬ÒòΪ²éѯ²¢²»ÐèÒª¼Ç¼״̬£¬ËùÒÔÎÒÃDz¢²»ÐèÒª½« IDbContext ÔÚ IUnitOfWork ºÍ IRepository Ö®¼ä½øÐй²Ïí£¬ÓÐÈË»á˵£¬IRepository Ó¦¸ÃÌṩÁìÓò¶ÔÏóµÄÔöɾ¸Ä²Ù×÷°¡£¬ÎÒÃÇÔÙ¿´Ï Repository µÄ¶¨Ò壺е÷ÁìÓòºÍÊý¾ÝÓ³Éä²ã£¬ÀûÓÃÀàËÆÓÚ¼¯ºÏµÄ½Ó¿ÚÀ´·ÃÎÊÁìÓò¶ÔÏó¡£
¼¯ºÏ·ÃÎÊÁìÓò¶ÔÏó£¬ÄÇ Repository Èç¹ûÕâÑùÉè¼ÆÄØ£º
public class StudentRepository : IStudentRepository { private IQueryable<Student> _students; public StudentRepository(IDbContext dbContext) { _students = dbContext.Set<Student>(); } public Student GetByName(string name) { return _students.Where(x => x.Name == name).FirstOrDefault(); } }ÕâÖÖ Repository Éè¼ÆÊDZȽϷûºÏ¶¨ÒåµÄ£¬ÁíÍ⣬ÎÒÃÇÈç¹û¶Ô Domain ½øÐе¥Ôª²âÊÔ£¬¼¯ºÏÐÔÖʵÄÁìÓò¶ÔÏóÒ²ÊÇ¿ÉÒÔ½øÐÐά»¤µÄ£¬Ö»²»¹ýûÓг־û¯¶øÒÑ¡£
×ܵÄÀ´Ëµ£¬µÚ¶þÖÖÉè¼Æ×î´óµÄÓŵã¾ÍÊÇÖ°ÔðÃ÷È·£¬ÄãÏë¸É»µÊÂÒ²¸É²»ÁË£¨ÒòΪ½Ó¿ÚÒѾ±»Ô¼Êø£©£¬Ä¿Ç°À´ËµÃ»·¢ÏÖʲôÎÊÌâ¡£
3. IDbContext -> IUnitOfWork(only commit)/IRepository -> UnitOfWork/Repository -> Application ServiceµÚÈýÖÖÉè¼Æ¾ÍÊDZ¾Æª²©ÎĽ²ÊöµÄ£¬ËüÆäʵÊÇ´ÓµÚÒ»Öֺ͵ڶþÖÖÖ®¼äȡһ¸öÖмäÖµ£¬×öÁËһЩÍ×й¤×÷£¬¾ßÌåµÄʵÏÖ£¬ÉÏÃæÒѾÏêϸ˵Ã÷ÁË£¬ÎÒ×î½ÓÊܲ»Á˵ÄÊÇ¶Ô IUnitOfWork µÄ¸ü¸Ä£¬ËäÈ»±íÃæ¿´ÆðÀ´ÂùºÃµÄ£¬µ«ÎÒ×ܾõµÃÓÐЩ²»¶Ô¾¢µÄµØ·½£¬¾ÍÏñÎÒÃÇ¡°ÆÈÓÚÏÖʵ×öһЩΥ±³µÀµÂµÄÊ¡±£¬¿ÉÄÜÏÖÔÚ¾õ²ì²»µ½Ê²Ã´£¬µ«³öÀ´»ìµÄ×ÜÊÇÒª»¹µÄ¡£
¹ØÓÚ Repository¡¢IUnitOfWork ºÍ IDbContext µÄÉè¼Æ£¬ÒÔ¼° Application Service µÄµ÷Óã¬ÎÒ¾õµÃÓ¦¸ÃÊÇÎÒÃÇÔÚ DDD ¼Ü¹¹Éè¼Æ¹ý³ÌÖУ¬×îÆÕ±éÓöµ½µÄÒ»¸öÎÊÌ⣬µ«Ò²ÊÇ×îÀ§»óµÄÒ»¸öÎÊÌ⣬±ÈÈç×î½üÁ½¸öÔ°ÓÑдµÄ²©ÎÄ£º
¶ÔÓÚ±¾Æª²©ÎÄ£¬Èç¹ûÄãÓÐʲôÎÊÌâ»òÒÉÎÊ£¬»¶Ó̽ÌÖѧϰ¡£:)
posted @
¡¡