количество измеримых единиц дизайна шаблона - PullRequest
1 голос
/ 19 апреля 2010

Я обдумываю хороший шаблон, который будет полезен в областях измеряемых единиц (т. Е. Длина, Время), и придумал следующий вариант использования, начальные классы и, конечно, вопросы!

1) Помогает ли сложный шаблон или усложняет?
2) Должны ли методы Convert в ComposityNode быть отдельным классом преобразователя?

Все комментарии приветствуются. Cheers,
Berryl

Пример использования:

var inch = new ConvertableUnit("inch", 1)
var foot = new ConvertableUnit("foot", 12)
var imperialUnits = new CompositeConvertableUnit("imperial units", .024)
imperialUnits.AddChild(inch)
imperialUnits.AddChild(foot)

var meter = new ConvertableUnit("meter", 1)
var millimeter = new ConvertableUnit("millimeter ", .001)
var imperialUnits = new CompositeConvertableUnit("metric units", 1)
imperialUnits.AddChild(meter)
imperialUnits.AddChild(millimeter)

var oneInch = new Quantity(1, inch);
var oneFoot = new Quantity(1, foot);
oneFoot.ToBase() //  "12 inches"

var oneMeter = new Quantity(1, meter);
oneInch.ToBase() //  .024 meters

Возможное решение

ConvertableUnit : Node  
  double Rate
  string Name

Quantity
  ConvertableUnit Unit
  double Amount

CompositeConvertableUnit : Node
  ISet<ConvertableUnit> _children
  ConvertableUnit BaseUnit {get{ return _children.Where(c=>c.Rate == 1).First() } } 
  Quantity ConvertTo(Quantity from, Quantity to)
  Quantity ToBase(Quantity from);

Ответы [ 3 ]

1 голос
/ 19 апреля 2010

Мартин Фаулер имеет очень хорошо продуманную модель для измерений и преобразований и тому подобное в шаблонах анализа. Стоит пересмотреть. Я полагаю, что он порекомендовал объект «Коэффициент конверсии», который будет выполнять преобразование из одного блока в другой.

1 голос
/ 20 апреля 2010

F # имеет встроенную концепцию единиц измерения, может быть, вам стоит посмотреть, как они ее реализовали.

0 голосов
/ 19 апреля 2010

Я не вижу никакой пользы от использования составного паттерна здесь. Из википедии:

Composite позволяет обрабатывать группу объектов так же, как один экземпляр объекта.

Вам не нужны группы объектов конвертера, достаточно списка конвертеров.

Что касается метода Convert - я бы сказал, что преобразование - это то, почему класс существует, вероятно, для него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...