Il mio tempo come sviluppatore (~ 8 anni) è stato speso nella creazione di tooling / automazione di un tipo o dell'altro. Gli strumenti che sviluppo di solito si interfacciano con una o più API. Queste API possono essere Win32, WMI, VMWare, un'applicazione di help desk, LDAP, ottieni l'immagine. Le app che sviluppo potrebbero essere solo per recuperare dati e archiviare / segnalare. Potrebbe essere il provisioning di gruppi di VM per creare live come ambienti fittizi, aggiornare un trouble ticket ecc.
Ho sviluppato in .Net e attualmente sto leggendo gli schemi di progettazione e sto cercando di pensare a come migliorare le mie capacità per utilizzare meglio e aumentare la mia comprensione di OOP. Per esempio, non ho mai usato un'interfaccia di mio interesse nella rabbia (che probabilmente non è una buona cosa), perché onestamente non riesco a identificare dove usare uno sarebbe utile in seguito quando modificherò il mio codice. Le mie classi sono in genere molto specifiche e non creo classi simili con proprietà / metodi simili che potrebbero utilizzare un'interfaccia comune (come forse una concessionaria di auto o un'applicazione di negozio potrebbe).
In genere utilizzo un approccio a più livelli per le mie app, con un livello di presentazione, un livello di business logic / manager che si interfaccia con i layer che effettuano chiamate all'API con cui sto lavorando. Le mie entità aziendali sono sempre solo oggetti container privi di metodo, che popolano con dati e passano avanti e indietro tra il mio livello di interfaccia API utilizzando metodi statici per proxy / convalida tra front e back end.
Il mio codice per natura del mio lavoro, ha pochi componenti comuni, almeno da quello che vedo. Quindi sto lottando per vedere come posso utilizzare meglio il design OOP e forse i modelli riutilizzabili.
Ho ragione ad essere preoccupato che potrei essere più intelligente su come lavoro, o è quello che sto facendo ora giusto per il mio lavoro? Oppure, mi manca qualcosa di fondamentale in OOP?
EDIT: Ecco un codice di base per mostrare come funzionano i miei layer mgr e api. Uso le classi statiche in quanto non mantengono alcun dato, ma facilitano lo spostamento tra i livelli.
public static class MgrClass
{
public static bool PowerOnVM(string VMName)
{
// Perform logic to validate or apply biz logic
// call APIClass to do the work
return APIClass.PowerOnVM(VMName);
}
}
public static class APIClass
{
public static bool PowerOnVM(string VMName)
{
// Calls to 3rd party API to power on a virtual machine
// returns true or false if was successful for example
}
}