Currently we have atoms, but no element. In general it will be OK, but it creates lots of issues. Mostly it's where the weird Normalizations come from. Should we isolate the concept into two parts: Element and Isotope?
How the new abstraction works
The Isotope generally replace the existing Atom, and Element is a higher level of abstraction. Atoms' states like index, localizedName, averageMolMass is pulled up to the Element, and the remaining part is named Isotope. An Element could have multiple Isotope, just as the real world elements have.
Pros
No more inference needed about atom's localizedName etc.
Cons
Modifying existing serialization and deserialization code may be troublesome. There are also other codes that needs modification, like normalization and xml files.
SubstanceContent need to consists of one and only one of ELement and Isotope. This contract is hard to write.
Some reactions may take Isotopes into consideration (like nuclear reactions, though they are not supported yet, I think we should make the types extensive enough so that we could implement it later). And that need a rewrite of some sort.
Question
Should we use this abstraction despite the difficulties of implementing?
Currently we have
atom
s, but no element. In general it will be OK, but it creates lots of issues. Mostly it's where the weird Normalizations come from. Should we isolate the concept into two parts:Element
andIsotope
?How the new abstraction works
The
Isotope
generally replace the existingAtom
, andElement
is a higher level of abstraction.Atom
s' states like index, localizedName, averageMolMass is pulled up to theElement
, and the remaining part is namedIsotope
. AnElement
could have multipleIsotope
, just as the real world elements have.Pros
Cons
ELement
andIsotope
. This contract is hard to write.Isotope
s into consideration (like nuclear reactions, though they are not supported yet, I think we should make the types extensive enough so that we could implement it later). And that need a rewrite of some sort.Question
Should we use this abstraction despite the difficulties of implementing?