나는 OOP가 데이터와 행동을 함께 캡슐화하는 것에 관한 것임을 알고 있지만 Image가 필요 하지 않기 때문에 Image 가이 경우에 크기 조정 논리를 포함하는 것이 좋지 않다고 생각 합니다. 자체 크기 조정 방법을 알 이미지.
미리보기 이미지는 실제로 다른 이미지입니다. 아마도 사진과 섬네일 (둘 다 이미지) 사이의 관계를 유지하는 데이터 구조가있을 수 있습니다.
프로그램을 이미지 (사진, 사진, 썸네일 등)와 서비스 (사진 리포지토리, 썸네일 생성기 등)로 나누려고합니다. 데이터 구조를 올바르게 파악한 다음 해당 데이터 구조를 생성, 조작, 변환, 유지 및 복구 할 수있는 서비스를 정의하십시오. 데이터 구조가 올바르게 작성되고 올바르게 사용되는지 확인하는 것보다 데이터 구조에 더 이상 동작을 두지 않습니다.
따라서 아니요, 이미지에는 미리보기 이미지를 만드는 방법에 대한 논리가 포함되어서는 안됩니다. 다음과 같은 메소드가있는 ThumbnailGenerator 서비스가 있어야합니다.
Image GenerateThumbnailFrom(Image someImage);
더 큰 데이터 구조는 다음과 같습니다.
class Photograph : Image
{
public Photograph(Image thumbnail)
{
if(thumbnail == null) throw new ArgumentNullException("thumbnail");
this.Thumbnail = thumbnail;
}
public Image Thumbnail { get; private set; }
}
물론 이것은 객체를 구성하는 동안 원하지 않는 노력을 기울이고 있음을 의미하므로 다음과 같은 것도 고려할 것입니다.
class Photograph : Image
{
private Image thumbnail = null;
private readonly Func<Image,Image> generateThumbnail;
public Photograph(Func<Image,Image> generateThumbnail)
{
this.generateThumbnail = generateThumbnail;
}
public Image Thumbnail
{
get
{
if(this.thumbnail == null)
{
this.thumbnail = this.generateThumbnail(this);
}
return this.thumbnail;
}
}
}
... 게으른 평가가있는 데이터 구조를 원하는 경우. (미안하지만 null 검사를 포함하지 않았고 스레드 안전으로 만들지 않았습니다. 불변의 데이터 구조를 모방하려는 경우 원하는 것입니다).
보시다시피, 이러한 클래스 중 하나는 일종의 PhotographRepository에 의해 작성되고 있으며, 아마도 의존성 주입을 통해 얻은 ThumbnailGenerator에 대한 참조가 있습니다.