Je pense à travers un joli modèle pour être utile à travers des domaines d'unités mesurables (par exemple, longueur, temps) et est venu avec le cas d'utilisation et les classes initiales suivantes, et bien sûr, des questions!quantité d'unités mesurables modèle de conception
1) Un motif composite aide-t-il ou complique-t-il?
2) Les méthodes Convert dans ComposityNode doivent-elles être une classe de convertisseur distincte?
Tous les commentaires ont été appréciés. Vive,
Berryl
Exemple de cas d'utilisation:
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
Solution possible
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);
il y en a un peu, je pense. Un composite d'unités de longueur impériale et un composite d'unités de longueur métrique pourraient tous deux être des nœuds dans un composite de longueur. Non? Voyez-vous un meilleur modèle pour cela? – Berryl
Composite n'était pas le bon modèle, et je me suis retrouvé avec une classe de convertisseur après tout. Salut – Berryl