von der Frage fort, die ich hier gefragt: C++ multi-dimensional data handlingSeparate Halter-Klasse aus dem Leser
In meinem Beispiel: Ich habe viele Chips haben, jeder Chip viele Register hat, hat jedes Register viele Zellen und jede Zelle hat viele Transistoren . Ich fragte, ob ich einen komplexen STL-Container für sie verwenden oder vollständige Klassen für sie implementieren sollte. Und wie empfohlen, entschied ich mich, komplette Klassen für sie zu implementieren. Ich habe:
class Chip
{
map<RegisterLocation, Register> RegistersPerLocation;
};
class Register
{
map<CellLocation, Cell> CellsPerLocation;
};
// etc..
Nun, ich brauche die Daten in den Klassen zu füllen, und ich kann nicht entscheiden: Soll die Daten, die Verantwortung dieser Klassen zu lesen, oder sollten sie wickeln nur die Behälter und das Lesen wird draußen sein.
Ich meine ich eine der folgenden Möglichkeiten wählen: Entweder:
class Chip
{
map<RegisterLocation, Register> RegistersPerLocation;
public:
void AddRegisterPerLocation(RegisterLocation, Register);
};
void ReadChipData(Chip & chip)
{
for (RegisterLocation loc = 0; loc < 10; loc++)
{
Register reg;
ReadReg(reg);
chip.AddRegisterPerLocation(loc, reg);
}
}
void ReadReg(Register & reg)
{
for (CellLocation loc = 0; loc < 10; loc++)
{
Cell cell;
ReadCell(cell);
reg.AddRegisterPerLocation(loc, cell);
}
}
//etc...
Oder:
class Chip
{
map<RegisterLocation, Register> RegistersPerLocation;
public:
void ReadData();
};
void Chip::ReadData()
{
for (RegisterLocation loc = 0; loc < 10; loc++)
{
Register reg;
reg.ReadData();
RegistersPerLocation[loc] = reg;
}
}
//etc...
void ReadChipData(Chip & chip)
{
chip.ReadData();
}
Danke.
stimme ich überhaupt nicht zu. So erstellen Sie Klassen, die niemals wiederverwendet werden können. Je. Trennen Sie Daten von der Aktion, das ist der richtige Weg. –
Klassen sind genau für bindende Maßnahmen zu Daten. Es wird angenommen, dass die Verkapselung gut ist. – sharptooth
@sharptooth: Sie haben zu einem gewissen Grad Recht. Sie binden nicht nur eine Aktion, sondern ein gültiges Verhalten. Eine andere Sache, die man im Auge behalten sollte, ist die Trennung von Bedenken. Die Serialisierbarkeit ist kein intrinsisches Verhalten eines Chips - das Modellieren in das Domänenobjekt wäre eine unfaire IMO. YMMV :) – dirkgently