메소드없이 클래스를 무엇이라고 부릅니까?
예를 들어
class A
{
public string something;
public int a;
}
위의 방법이없는 클래스입니다. 이 유형의 클래스에는 특별한 이름이 있습니까?
메소드없이 클래스를 무엇이라고 부릅니까?
예를 들어
class A
{
public string something;
public int a;
}
위의 방법이없는 클래스입니다. 이 유형의 클래스에는 특별한 이름이 있습니까?
답변:
대부분의 경우 : 안티 패턴.
왜? "연산자"클래스와 데이터 구조로 절차 적 프로그래밍을 용이하게하기 때문입니다. 정확히 OOP가 아닌 데이터와 동작을 분리합니다.
종종 : DTO (Data Transfer Object)
비즈니스 / 도메인 개체에서 파생 된 데이터를 교환하기위한 데이터 구조 만 읽습니다.
때때로 : 단지 데이터 구조.
글쎄, 때로는 단순하고 단순하며 조작이없는 데이터를 보유하는 구조를 가져야합니다. 그러나 공개 필드를 사용하지 않고 접근 자 (getter 및 setter)를 사용합니다.
내가 전화 줄 struct
이나 record
는 데이터 저장을 위해 사용되며,이 같은 언어에 매우 일반적이기 때문에 C
당신이 볼 수 : 구조체 (C 프로그래밍 언어) . 따라서 개인적 struct
으로 더 적합하고 읽기 쉬운 클래스 대신에 사용하는 것이 좋습니다.
struct A
{
public string something;
public int a;
}
일반적으로 이들은 다른 사람들과 마찬가지로 DTO (Data Transfer Object) 로 사용됩니다 .
이것들은 일반 올드 __ 객체 빈은 Java 또는 C 또는 CIL, 또는 당신이 사용하는 어떤 언어입니다 (PO_Os).
통신을 위해 간단한 데이터 블록으로 사용되는 경우 다음과 같이 알 수 있습니다. 데이터 전송 개체 (DTO) .
외부에서 제공 한 일부 데이터를 나타내는 경우 엔티티 라고 할 수 있습니다 .
그런 클래스를 변경 가능한 데이터 홀더라고 부르고 때로는 일반적인 형식을 사용했습니다.
class DataHolder<T>
{
public T dat;
}
dat
속성 내에서 줄 바꿈 하면 성능이 저하되고 이점이 없습니다. 속성 접근자가 필드를 읽거나 쓰지 않는 것 외에는 일부 구현이 중단되지 않으므로 수행 할 수있는 작업이 없기 때문입니다. 또한 Interlocked
메소드 를 사용해야 할 수도 있지만 dat
필드가있는 구조체 인 경우 메소드 를 사용해야 할 수도 있습니다.dat
속성에 래핑 된 .
변경 가능한 데이터 홀더는 데이터를 보유 해야하는 유형 (변경 가능 여부)에 유용 할 수 있지만 변경 불가능한 유형과 동일한 방식으로 데이터 교환에 안전하게 사용할 수는 없습니다. 예를 들어,
myData = myCollection.GetData(myKey);
다음과 같은 경우 명확한 의미를 갖습니다 GetData
변경 불가능한 클래스 유형 또는 변경 가능한 데이터에 대한 참조를 포함하지 않은 구조체 ( "변경 가능" 반환하는 . 그러나 변경 가능한 클래스 객체를 반환 한 경우 해당 객체의 변경 사항이 기본 컬렉션에서 지속적으로 무시되는지, 지속적으로 업데이트되는지, 또는 설명을 충족하지 않는 어리 석거나 예측할 수없는 동작이 발생하는지 확실하지 않습니다.
컬렉션이 변경 가능한 객체에서 데이터를 반환하도록하려면 올바른 패러다임은 종종 다음과 같습니다.
var myData = new WhateverType();
myCollection.GetData(myKey, myData);
myData.ModifySomehow();
myCollection.StoreData(myKey, myData);
이 접근 방식을 사용 하면 컬렉션의 데이터로 채워지 GetData
는 명확한 함의가 myData
있지만 myCollection
함수가 완료된 후에는 참조를 유지하거나 다른 용도로 사용하지 않을 것으로 예상됩니다. StoreData
마찬가지로 myData
참조를 유지하지 않고 자체 내부 데이터 구조에 정보 를 복사합니다 . 이 접근 방식의 한 가지 장점은 클라이언트 코드가 루프 내에서 많은 데이터 항목을 읽는 myData
경우 루프 외부에서 하나의 인스턴스를 안전하게 작성한 다음 매번 동일한 인스턴스를 재사용 할 수 있다는 것입니다. 마찬가지로, myCollection
새 인스턴스를 만들지 않고도 키와 관련된 개체 인스턴스를 다시 사용할 수 있습니다 (전달 된 인스턴스에서 데이터 복사).