In uno dei progetti (in C), ho il codice che assomiglia a questo ( i nomi sono offuscati appositamente per la domanda per non fornire dettagli del probject ):
typedef struct Module_s {
/* These fields are parsed by f1() */
S1 *s11;
S2 *s12;
size_t n11;
size_t n12;
int i11;
/* These fields are parsed by f2() */
S2 *s21;
S3 *s22;
S4 *s23;
char *c24;
/* These fields are set by f3() and later */
void *v31;
bool b32;
S5 s33[N];
bool b34;
} Module_t;
{
/* Read only header of file and
* parse first 5 fields to determine how to load the rest. */
Module_t *module = f1(input_file);
/* Read the rest of file using information set by f1()
* and determine how f3() should preprocess it. */
f2(input_file, module);
/* Preprocess the file using information provided by f1() and f2(). */
f3(module);
/* Process the file using the information provided by f2() and f3(). */
f4(module);
}
Quindi, la domanda è: è una buona scelta separare Module_t
in 3 pezzi più piccoli, che conterranno campi corrispondenti, impostati da ciascuna funzione? Quindi ogni funzione accetterà e restituirà solo una parte più piccola di Module_t
, che è probabilmente buona, ma potrebbe complicare ulteriormente lo sviluppo in quanto le interconnessioni diventano più complesse e mantenere tutti i campi dipendenti in un posto sembra più semplice.
Quello che ho in mente è questo:
typedef struct SS1_s {
/* These fields are parsed by f1() */
S1 *s11;
S2 *s12;
size_t n11;
size_t n12;
int i11;
} SS1_t;
typedef struct SS2_s {
/* These fields are parsed by f2() */
S2 *s21;
S3 *s22;
S4 *s23;
char *c24;
} SS2_t;
typedef struct SS3_s {
/* These fields are set by f3() and later */
void *v31;
bool b32;
S5 s33[N];
bool b34;
} SS3_t;
typedef struct Module_s {
SS1_t ss1;
SS2_t ss2;
SS3_t ss3;
} Module_t;
{
/* Read only header of file and
* parse first 5 fields to determine how to load the rest. */
SS1_t *ss1 = f1(input_file);
/* Read the rest of file using information set by f1()
* and determine how f3() should preprocess it. */
SS2_t *ss2 = f2(input_file, ss1);
/* Preprocess the file using information provided by f1() and f2(). */
SS3_t *ss3 = f3(ss1, ss2);
/* Compose module and
* process the file using the information provided by f2() and f3().
* Store ss1 as well for future use. */
Module_t module = f4(ss1, ss2, ss3);
}
Quindi, dovrei rifattare la struttura in sottostrutture più piccole?