Sto lavorando su un sistema di elaborazione dei documenti.
Sono fiducioso con una classe Document
che rappresenta ciascun documento in elaborazione.
Il problema:
Ogni Document
può avere un CoverSheet
, e se lo fa, dobbiamo ottenere CoverSheetInfo
da questo CoverSheet
(per la ridenominazione e l'elaborazione). Ma il controllo di una CoverSheet
e la forzatura delle informazioni in CoverSheetInfo
comportano una discreta quantità di codice Apache PDFBox.
Sto cercando di decidere quale sia il posto migliore per avere questa funzionalità.
Opzione 1
Document
class avrà questi metodi:
public boolean hasCoverSheet()
public CoverSheetInfo getCoverSheetInfo()
Pro:
Il comportamento è vicino ai dati: il processo di controllo di Document
per un CoverSheet
avviene in Document
che sembra ragionevole.
Contro:
Questo aggiunge molte linee di parsing relative a PDFBox che rendono l'altro saggio semplice set-get Document
disordinato e rende la classe Document
superiore a 300 righe per includere questa funzionalità. Quindi opzione 2 ...
Opzione 2
Crea una classe DocumentParser
che avrebbe:
public boolean hasCoverSheet(Document document)
public CoverSheetInfo getCoverSheetInfo(Document document)
Pro:
Tutto il codice di analisi specifico per PDFBox si trova nella propria classe. Penso che questo sia un buon esempio di rafforzamento della Single Responsibility / Law of Demeter Siccome non penso che Document
debba necessariamente sapere come analizzare le informazioni dai fogli di copertina.
Contro:
Awkward (?) separazione del comportamento dai dati (?)
Quale sembra il più ragionevole e in che modo?
Modifica: sono disperato. Qualsiasi feedback sarebbe assolutamente. fricken. amato.
Modifica 2
Un Document
è in questo caso un documento ipotecario scansionato, e sempre sarà un PDF. Una Document
viene creata quando la mia app trova i file in una directory (viene creato un Document
per ogni file trovato). DocumentParser
dovrebbe elaborare Documents
, a destra, File è stato un errore di battitura.
A questo punto, Document
è essenzialmente un wrapper attorno al File. In Opzione 1 , avrebbe CoverSheetInfo
come campo e File stubFile
e boolean
riguardo all'esistenza di queste cose.
Ecco la "storia" per quello che sto facendo:
Qualcuno scannerizzerà un documento. Finirà in una directory. La mia app ha bisogno di guardare quella directory, e
-
rinomina i file con la loro copertina (se ne hanno uno)
-
crea uno stub delle prime 8 pagine (se il file è molto grande)
-
carica questi file (e tutti gli stub creati) su Google Drive.