Sollten Geschäftsobjekte eigene DTOs erstellen können?

Angenommen, ich habe die folgende Klasse:

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;
}

... und ein DTO zum Transportieren der Kamerainformationen über eine Dienstgrenze (WCF), beispielsweise zum Anzeigen in einer WinForms / WPF / Web-App:

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; }
}

Nun kann ich @ eine Methode hinzufügCamera um seine Daten anzuzeigen:

class Camera
{
    // blah blah

    public CameraData ToData()
    {
        var regionOfInterestData = regionOfInterest.ToData();

        return new CameraData()
        {
            Exposure = exposure,
            Brightness = brightness,
            Contrast = contrast,
            RegionOfInterest = regionOfInterestData
        };
    }
}

ode, Ich kann eine Methode erstellen, für die ein spezieller IReporter übergeben werden muss, damit die Kamera ihre Daten anzeigen kann. Dadurch wird die Abhängigkeit von der Ebene "Verträge" aufgehoben (die Kamera muss nichts mehr über CameraData wissen):

class Camera
{
    // beep beep I'm a jeep

    public void ExposeToReporter(IReporter reporter)
    {
        reporter.GetCameraInfo(exposure, brightness, contrast, regionOfInterest);
    }
}

Also was soll ich tun? Ich bevorzuge die zweite, aber dafür muss der IReporter ein CameraData-Feld haben (das durch @ geändert wirdGetCameraInfo()), das fühlt sich komisch an. Wenn es eine noch bessere Lösung gibt, teile sie mir bitte mit! Ich bin immer noch ein objektorientierter Neuling.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage