db로 직렬화되는 개체가 있습니다.클래스의 다른 속성에서 런타임 속성을 분리하는 방법에 대한 모범 사례
질문은 런타임 속성 (예 : 마지막 런타임 등)을 유지할 수있는 곳이 같은 클래스 또는 별도의 클래스 또는 파생 클래스입니까? 이 시나리오에서 가장 좋은 방법은 무엇입니까?
업데이트 예를 들어 : 개체 기차
속성 :
런타임 타입, 체중, 신장, 속도 등 : 여행 시작 날짜, 여행 종료일
db로 직렬화되는 개체가 있습니다.클래스의 다른 속성에서 런타임 속성을 분리하는 방법에 대한 모범 사례
질문은 런타임 속성 (예 : 마지막 런타임 등)을 유지할 수있는 곳이 같은 클래스 또는 별도의 클래스 또는 파생 클래스입니까? 이 시나리오에서 가장 좋은 방법은 무엇입니까?
업데이트 예를 들어 : 개체 기차
속성 :
런타임 타입, 체중, 신장, 속도 등 : 여행 시작 날짜, 여행 종료일
지금 추가 된 예제를 보면 나는 이것을 옮겨서 대신 캡슐화를 사용한다고 말합니다. 즉, 런타임 속성 (실제로는 올바른 용어가 아님)이있는 TrainJourney 클래스와 참조 데이터 엔티티 인 Train 인스턴스로 이동합니다.
데이터 엔터티에 추가 속성 (일반적으로 부분 클래스에 있음)을 추가하는 것은 데이터 엔터티에 직접 연결되어있는 한 괜찮습니다. 이것은 일반적으로 계산 된 값, 지연된/캐시 된 값, 해석 (Status == Status.Open이 아닌 IsOpen 등)을 의미합니다.
귀하의 경우 추가 속성은 관련이없는 개념과 관련됩니다. 관심사를 분리하면 Train 클래스에 혼합하여 혼란 스럽습니다. 그래서 :하지 마십시오.
당신 가정 일종의 표준 시리얼 라이저를 사용하고 있습니다. 속성을 사용하여 어떤 속성이 일련 화되는지 표시 할 수있는 가능성을 제공합니다. 직렬화의 일부로 지속되어야하는 것만 표시하십시오.
게다가 데이터베이스에 저장하기 위해 직렬화를 사용하는 솔루션은 실제로 생각해야한다고 생각합니다. 관련성이있는 경우도 있지만 개체의 속성을 데이터베이스의 열에 매핑하는 것이 훨씬 더 좋습니다.
OP는 직렬화 된 것이 아니라 "persisted"를 의미 할 수 있습니다. :) –
나는 다음과 같은 클래스 구조를 사용합니다 : (간결 제외 "개인/공개"와 속성) 내가 보여준대로 또한
// describes the run schedules
class RunSchedule {
int RunScheduleId; // only used by DB to uniquely identify record, never seen by user
int RunId;
DateTime StartTime;
}
// describes the runs, so repeat runs do not duplicate this information
class Run {
int RunId; // only used by DB to uniquely identify record, never seen by user
string Name; // unique run name as known by everyone, eg. "Chicago express"
Train Train;
string StartLocation;
string EndLocation;
TimeSpan Duration;
}
// describes the train-specific information, without duplicating anything
class Train {
int TrainId; // only used by DB to uniquely identify record, never seen by user
string Name; // unique train identifier as known by everyone
TrainType Type;
}
// describes the train-common information, shared across trains of the same type
class TrainType {
int TypeId; // only used by DB to uniquely identify record, never seen by user
string Description;
double WeightMetricTonnes;
double HeightMetres;
double SpeedKms;
}
, 등 길이, 속도, 무게 같은 것들에 대해 이야기를 , 당신이 장치를 진술했는지 확인하십시오. 나는 또한 이것들에 상태를 추가하기 때문에 데이터 입력 중에 쓸모없는 실행, 열차 등을 숨길 수 있습니다.
'런타임 속성'이 아닌 무언가를 만들어야합니다. .NET에는 '디자인 타임'속성이 있으며, WPF 및 Winforms에는 디자이너가 있습니다. 코드 생성기는 사용자 대신 사용자 컴퓨터에서 실행됩니다. 그게 얼마나 관련성이 있는지는 그 질문에서 추측 할 수 없습니다. –
"직렬화"(BLOB 또는 CLOB 등으로 저장 됨) 또는 "지속됨"을 의미합니까? 또한 여기서 런타임 속성에 대한 귀하의 의미에 대해 명확하지 않습니다. 저장할 필요가없는 데이터를 의미합니까? –
@Hans 물론 거기에는 * 런타임 속성 (ICustomTypeDescriptor, 동적 등)이 있습니다. 그러나 이것이 OP가 의미하는 바는 아닙니다. –