次のクラスがあるとします。
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;
}
...そして、サービス境界(WCF)を越えてカメラ情報を転送するためのDTO(たとえば、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);
}
}
だから私はどちらをすべきですか?私は2番目の方が好きですが、IReporterにCameraDataフィールド(によって変更されるGetCameraInfo()
)が必要であり、これは奇妙に感じます。また、さらに良い解決策があれば、私と共有してください!私はまだオブジェクト指向の初心者です。