0

有兩個文件:一個給人界面如下:任何人都可以解釋什麼是私人只讀IStudentRepository _studentRepository?爲什麼要採取?

IStudentInterface.cs

public interface IStudentService 
{ 
    IEnumerable<Student> GetStudents(); 
    Student GetStudentById(int id); 
    void CreateStudent(Student student); 
    void UpdateStudent(Student student); 
    void DeleteStudent(int id); 
    void SaveStudent(); 
} 

StudentService.cs:

public class StudentService : IStudentService 
    { 
    private readonly IStudentRepository _studentRepository; 
    private readonly IUnitOfWork _unitOfWork; 
    public StudentService(IStudentRepository studentRepository, IUnitOfWork unitOfWork) 
    { 
     this._studentRepository = studentRepository; 
     this._unitOfWork = unitOfWork; 
    } 
    #region IStudentService Members 

    public IEnumerable<Student> GetStudents() 
    { 
     var students = _studentRepository.GetAll(); 
     return students; 
    } 

    public Student GetStudentById(int id) 
    { 
     var student = _studentRepository.GetById(id); 
     return student; 
    } 

    public void CreateStudent(Student student) 
    { 
     _studentRepository.Add(student); 
     _unitOfWork.Commit(); 
    } 

    public void DeleteStudent(int id) 
    { 
     var student = _studentRepository.GetById(id); 
     _studentRepository.Delete(student); 
     _unitOfWork.Commit(); 
    } 

    public void UpdateStudent(Student student) 
    { 
     _studentRepository.Update(student); 
     _unitOfWork.Commit(); 
    } 

    public void SaveStudent() 
    { 
     _unitOfWork.Commit(); 
    } 

    #endregion 
} 

請解釋我爲什麼在創建私有變量_studentRepository ?我們也可以完成我們的任務而不是它。爲什麼所有這些都是這樣完成的?請給我解釋一下這個概念?

回答

2

IStudentRepository是一組功能(合同,抽象,服務 - 它可以通過不同的方面去),該StudentService對象取決於執行的工作。 StudentService也取決於IUnitOfWork來執行其工作。

private readonly IStudentRepository _studentRepository;是一個變量聲明,用於存儲實現合同的對象的實例。它是私有的,因爲它只需要在StudentService類中被訪問,並且它是隻讀的,因爲它是在類的構造函數中設置的,並且不需要在任何`StudentService'實例的生命週期中稍後修改。

控制反轉的概念是,代替StudentService負責定位它的依賴的實施方式和實例化它們和管理它們的壽命,外部StudentService一些其他代碼採用這些責任。這是可取的,因爲它減少了類的顧慮。

爲了更容易地應用控制反轉,經常使用容器。容器提供了一種方式來說明應該爲接口或合約使用哪些實現,並且還提供了一種自動提供這些實現的機制。最常見的方式是通過構造函數注入。 IoC容器將創建StudentService類,並且還會創建構建它所需的依賴關係。在構造函數中,您可以將依賴項對象存儲在類級別的變量中,以便在調用方法時用它們執行工作。

+1

正是我想要的......謝謝 –

0

我認爲qes的答案很清楚!

IStudentService是一個接口,它不包含具體的方法,只是定義了什麼實現必須具備和必須做的。

類StudentService是實現,你已經知道你需要創建,更新,刪除和保存方法,因爲它們在接口中。所以你會在這堂課中找到這個具體的方法。

_studentRepository是一個領域,而不是財產,所以你不希望任何人去觸摸它,這就是爲什麼它是私有的。但也是隻讀的,因爲它需要在初始化StudentServices類時定義,並且需要在創建對象時保留它。

我希望這個答案能補充上一個。

相關問題