データ アクセス層のデータベースから取得した値を WCF 層のデータ コントラクトに割り当てる正しい方法について質問があります。
データベースからすべての学生のリストを取得し、それを学生データ コントラクトに割り当てる単純なシナリオを考えてみます。
私の学生データ契約は次のようになります。
[DataContract]
public class StudentDC
{
[DataMember]
public int StudentID { get; set; }
[DataMember]
public string StudentName { get; set; }
}
私のデータ アクセス クラスには、List GetAllStudents() のようなメソッドがあります。
私の質問は、GetAllStudents() メソッドの実装に関するものです。以下のような表示でよろしいでしょうか。
public List GetAllStudents() {
List<StudentDC> studentDCs = new List<StudentDC>(); var students = db.Students_TB.Select(s => s).ToList(); foreach(Student_TB student in students) { StudentDC studentDC = new StudentDC(); studentDC.StudentID = student.StudentID; studentDC.StudentName = student.StudentName; studentDCs.Add(studentDC); } return studentDCs;
}
データ コントラクトに値を割り当てる上記の方法は正しいですか、それとも、次のように、データ アクセス レイヤーでデータを受け入れてから、サービス コントラクト実装のデータ コントラクトに値を渡す学生ビジネス オブジェクト クラスを用意する必要があります。 :
次のような学生ビジネスオブジェクトクラスがあります。
パブリック クラス StudentBO {
int studentID; string studentName; public int StudentID { get { return studentID; } set { studentID = value; } } public <return type> BusinessLogicMethod1() { // Implementation }
}
次に、データ アクセス レイヤーで、データベースから取得した値を学生ビジネス オブジェクトのコレクションに次のように割り当てます。
public List<StudentBO> GetAllStudents()
{
List<StudentBO> studentBOs = new List<StudentBO>();
var students = db.Students_TB.Select(s => s).ToList();
foreach(Student_TB student in students)
{
StudentBO studentBO = new StudentBO();
studentBO.StudentID = student.StudentID;
studentBO.StudentName = student.StudentName;
studentBOs.Add(studentBO);
}
return studentBOs;
}
学生ビジネス オブジェクトの値は、サービス コントラクト実装の学生データ コントラクトに割り当てられ、そこからネットワーク経由で送信されます。
上記の2つの方法のうち、正しい方法はどれですか?