Sto usando correttamente le classi Factory e Impl?

1

Nel mio simulatore di derby distruzione 2d ho una classe CargoTruck e CargoTruckImpl che implementano un'interfaccia chiamata Truck. CargoTruck ha un riferimento a CargoTruckImpl che viene restituito attraverso CargoTruckImplFactory.

Ma poi ho deciso di aggiungere a questa catena avendo CargoTruckImpl e CargoTruckMovementImpl utilizzare l'interfaccia chiamata Movimento. CargoTruckImpl ha un riferimento a CargoTruckMovementImpl che viene restituito a CargoTruck attraverso MovementImplFactory.

CargoTruck- > & gt CargoTruckImpl-; CargoTruckMovmentImpl

FuelTruck- > & gt FuelTruckImpl-; FuelTruckMovmentImpl

L'aggiunta alla catena è così brutta? Sto violando il Principio di Separazione o il Principio Aperto-chiuso usando le classi di Fabbrica in questo modo? C'è un modo migliore per farlo?

    
posta Ein Doofus 11.10.2011 - 17:00
fonte

2 risposte

1

È fantastico che tu stia applicando alcuni dei principi SOLID! Tuttavia, sarei un po 'sospettoso sul numero di classi Impl e sulle classi Factory che stai implementando (CargoTruck e CargoTruckImpl suona come la stessa classe per me, ad esempio). Sembra che potresti voler applicare alcuni principi di DI qui (o almeno avere qualcosa come Guice fare un po 'di questo lavoro pesante per te).

Torno sempre al articolo di Martin Fowler su DI quando comincio a preoccuparmi di creare troppe Fabbriche, ecc. potrebbe aiutare a chiarire il tuo pensiero in quest'area.

    
risposta data 11.10.2011 - 18:48
fonte
0

Che cosa fa MovementImplFactory per te qui? Estratto e separa le istanze nei loro domini.

Questo avrebbe un AbstractMovementImplFactory esteso da CargoTruckMovementImplFactory e FireTrucImplkMovementFactory.

Quindi le istanze dei camion hanno riferimenti alle fabbriche appropriate Ad esempio, costruisci CargoTruckImpl per avere un riferimento a CargoTruckMovementImplFactory. Quando hai bisogno di un movimento per quel camion, può utilizzarlo per costruirlo, e hai separato la logica di movimento dalla logica del carrello.

    
risposta data 11.10.2011 - 17:49
fonte

Leggi altre domande sui tag