Должны ли бизнес-объекты создавать собственные DTO?
Предположим, у меня есть следующий класс:
class Camera
{
public Camera(
double exposure,
double brightness,
double contrast,
RegionOfInterest regionOfInterest)
{
this.exposure = exposure;
this.brightness = brightness;
this.contrast = contrast;
this.regionOfInterest = regionOfInterest;
}
public void ConfigureAcquisitionFifo(IAcquisitionFifo acquisitionFifo)
{
// do stuff to the acquisition FIFO
}
readonly double exposure;
readonly double brightness;
readonly double contrast;
readonly RegionOfInterest regionOfInterest;
}
... и DTO для передачи информации о камере через сервисную границу (WCF), скажем, для просмотра в приложении WinForms / WPF / Web:
using System.Runtime.Serialization;
[DataContract]
public class CameraData
{
[DataMember]
public double Exposure { get; set; }
[DataMember]
public double Brightness { get; set; }
[DataMember]
public double Contrast { get; set; }
[DataMember]
public RegionOfInterestData RegionOfInterest { get; set; }
}
Теперь я могу добавить методCamera
выставить свои данные:
class Camera
{
// blah blah
public CameraData ToData()
{
var regionOfInterestData = regionOfInterest.ToData();
return new CameraData()
{
Exposure = exposure,
Brightness = brightness,
Contrast = contrast,
RegionOfInterest = regionOfInterestData
};
}
}
или жеЯ могу создать метод, который требует, чтобы специальный IReporter передавался для камеры, чтобы выставлять свои данные. Это удаляет зависимость от слоя Contracts (Camera больше не должна знать о CameraData):
class Camera
{
// beep beep I'm a jeep
public void ExposeToReporter(IReporter reporter)
{
reporter.GetCameraInfo(exposure, brightness, contrast, regionOfInterest);
}
}
Так что мне делать? Я предпочитаю второй, но он требует, чтобы у IReporter было поле CameraData (которое изменяетсяGetCameraInfo()
), что кажется странным. Кроме того, если есть еще лучшее решение, пожалуйста, поделитесь со мной! Я все еще объектно-ориентированный новичок.