과거에 프로젝트의 프레임 워크를 만들었던 이유 중 하나는 데이터베이스 정보를 비즈니스 엔티티 클래스 (속성이없는 속성 만)로로드하고 비즈니스 엔티티 클래스에서 데이터베이스는 실행될 저장 프로 시저의 매개 변수 컬렉션을로드합니다. 이 프로젝트에서 나는 DB Filed info와 SP Parameters를 가진 Business Entity Class를 아래 샘플과 같이 꾸며서 프레임 워크가 리플렉션을 사용하여 엔티티 또는 매개 변수 컬렉션을로드하게하여 유지 보수를위한 새로운 코드를 생성 할 필요가 없었습니다.
하지만 지금은 훨씬 더 큰 새 프로젝트를 만들고 있습니다. 유지 보수 할 코드가 훨씬 많지만 성능이 중요하고 모든로드에 리플렉션을 사용하는 것이 가치가 있는지 궁금해하고 코드를 훨씬 간단하게 만들거나 실제로 모든 코드를 작성하고 모든 변경 사항을 유지 하시겠습니까?
MSDN에서 일부 검색을 읽었지만 MSDN의 설명서를 읽었지만 여전히 많은 의견을 보았습니다. 오버 헤드가 그렇게 좋지 않은 숫자를 나타내는 리플렉션을 선호하는 사람들과 리플렉션에서 멀리 떨어져있게하는 것이 실제로 더 바람직하다고 말하는 사람들 새로운 응용 프로그램에 대한
기술 사양 :
언어 : C#
닷넷 버전 : 3.5
응용 프로그램 종류 : 또한 C#으로 논리 구성 요소 및 데이터 액세스 계층에 접근 클래식 웹 양식
데이터베이스 : SQL 서버 2008
데이터베이스 추상화 계층 : DB에 대한 모든 액세스는 저장 프로 시저 및 사용자 정의 함수를 통해 이루어집니다. .
샘플 코드 :
데이터 액세스 레이어에 대한 반사 성능
// Decorated class
[System.Serializable()]
public class bMyBusinessEntity{
private Int64 _MyEntityID;
private string _MyEntityName;
private string _MyEntityDescription;
[aFieldDataSource(DataColumn = "MyEntityID")]
[aRequiredField(ErrorMessage = "The field My Entity ID is mandatory!")]
[aFieldSPParameter(ParameterName="MyEntityID")]
public Int64 MyEntityID{
get { return _MyEntityID; }
set { _MyEntityID = value; }
}
[aFieldDataSource(DataColumn = "MyEntityName")]
[aFieldSPParameter(ParameterName = "MyEntityName")]
public string MyEntityName{
get { return _MyEntityName; }
set { _MyEntityName = value; }
}
[aFieldDataSource(DataColumn = "MyEntityDescription")]
[aFieldSPParameter(ParameterName = "MyEntityDescription")]
public string MyEntityDescription{
get { return _MyEntityDescription; }
set { _MyEntityDescription = value; }
}
}
// To Load from DB to the Object:
using (DataTable dtblMyEntities = objDataSource.ExecuteProcedure(strSPName, objParams)) {
if (dtblMyEntities.Rows.Count > 0) {
DataRow drw = dtblMyEntities.Rows[0];
oFieldDataSource.LoadInfo(ref objMyEntity, drw);
return objMyEntity;
}
else
throw new Exception(“Row not found!”);
}
// To Load from the Object to the DB
oDataSource objDataSource = new oDataSource();
IDbDataParameter[] objParams = objDataSource.GetProcedureParameters(strSPName);
oFieldSPParameter.LoadInfo(objParams, objMyEntity);
objDataSource.ExecuteNonQuery(strSPName, objParams);