Должны ли бизнес-объекты создавать собственные 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()), что кажется странным. Кроме того, если есть еще лучшее решение, пожалуйста, поделитесь со мной! Я все еще объектно-ориентированный новичок.

Ответы на вопрос(5)

Ваш ответ на вопрос