GenNode: revert -- better not handle this problem on ETD level
...rather extend the "object builder" DSL notation to allow passing in a given EntryID literally. Rationale is, we should handle the problem of unique IDs on the level of the domain model. If we attempt to "fix" this within GenNode, the price would be to make the ETD creation stateful
This commit is contained in:
parent
83394a6f01
commit
1bbe903202
4 changed files with 114 additions and 11 deletions
|
|
@ -233,8 +233,8 @@ namespace diff{
|
|||
idi::getTypeHash<X>())
|
||||
{ }
|
||||
|
||||
ID (string const& symbolicID, HashVal seed)
|
||||
: idi::BareEntryID (symbolicID, seed)
|
||||
ID (idi::BareEntryID&& rawD)
|
||||
: idi::BareEntryID{move (rawD)}
|
||||
{ }
|
||||
|
||||
public:
|
||||
|
|
@ -447,12 +447,12 @@ namespace diff{
|
|||
}
|
||||
};
|
||||
|
||||
/** fabricate a GenNode with the literally given ID */
|
||||
template<typename X>
|
||||
static GenNode
|
||||
forAttribute (string const& key, X&& payload)
|
||||
asAttribute (idi::BareEntryID && rawID, X&& payload)
|
||||
{
|
||||
return GenNode{ID(key, std::rand()) // NOTE: random hash seed
|
||||
,DataCap(forward<X> (payload))};
|
||||
return GenNode{ID{move (rawID)}, DataCap{forward<X> (payload)}};
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -794,14 +794,21 @@ namespace diff{
|
|||
inline GenNode
|
||||
MakeRec::genNode()
|
||||
{
|
||||
return GenNode(std::move(record_));
|
||||
return GenNode{std::move(record_)};
|
||||
}
|
||||
|
||||
template<>
|
||||
inline GenNode
|
||||
MakeRec::genNode(string const& symbolicID)
|
||||
MakeRec::genNode (idi::BareEntryID rawID)
|
||||
{
|
||||
return GenNode(symbolicID, std::move(record_));
|
||||
return GenNode::asAttribute (std::move(rawID), std::move(record_));
|
||||
}
|
||||
|
||||
template<>
|
||||
inline GenNode
|
||||
MakeRec::genNode (string const& symbolicID)
|
||||
{
|
||||
return GenNode{symbolicID, std::move(record_)};
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -867,7 +874,7 @@ namespace diff{
|
|||
inline GenNode
|
||||
Rec::buildAttribute (string const& key, X&& payload)
|
||||
{
|
||||
return GenNode::forAttribute (key, forward<X>(payload));
|
||||
return GenNode{key, forward<X>(payload)};
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -112,7 +112,9 @@ namespace lib {
|
|||
template<class BA>
|
||||
class PlantingHandle;
|
||||
|
||||
|
||||
namespace idi {
|
||||
class BareEntryID;
|
||||
}
|
||||
namespace diff{
|
||||
|
||||
namespace error = lumiera::error;
|
||||
|
|
@ -562,6 +564,7 @@ namespace diff{
|
|||
*/
|
||||
|
||||
VAL genNode();
|
||||
VAL genNode(idi::BareEntryID rawID);
|
||||
VAL genNode(string const& symbolicID);
|
||||
|
||||
template<typename X, typename...ARGS>
|
||||
|
|
|
|||
|
|
@ -211,6 +211,15 @@ namespace test{
|
|||
// but while o4 was based on o2,
|
||||
// adding all the additional contents didn't mutate o2
|
||||
CHECK (isnil(o2.data.get<Rec>()));
|
||||
|
||||
// special case: can create an (Attribute) GenNode with specifically crafted ID
|
||||
idi::EntryID<uint8_t> veryspecialID{"quasi niente"};
|
||||
auto o5 = MakeRec().genNode(veryspecialID);
|
||||
CHECK (o5 != MakeRec().genNode());
|
||||
CHECK (o5 != MakeRec().genNode("quasi niente"));
|
||||
CHECK (o5 == MakeRec().genNode(veryspecialID));
|
||||
CHECK (name(o5) == "quasi_niente"); // Note: EntryID sanitised the string
|
||||
CHECK (o5.idi == veryspecialID);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -21056,7 +21056,12 @@
|
|||
<node CREATED="1541545944079" ID="ID_1737663580" MODIFIED="1541545963000" TEXT="ein Duplikat ersetzt stillschweigend die Registrierung"/>
|
||||
<node CREATED="1541545963822" ID="ID_1562348206" MODIFIED="1541546016778" TEXT="Identität beruht auf EntryID (Hash)"/>
|
||||
<node CREATED="1541545975779" ID="ID_1748214927" MODIFIED="1541546024401" TEXT="diese(r) wird aber systematisch gebildet"/>
|
||||
<node CREATED="1541546204541" ID="ID_1625379453" MODIFIED="1541546208976" TEXT="speziell...">
|
||||
<node CREATED="1541790406153" ID="ID_966273732" MODIFIED="1541790408357" TEXT="relevant in Record<GenNode>">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
</node>
|
||||
<node CREATED="1541546204541" FOLDED="true" HGAP="30" ID="ID_1625379453" MODIFIED="1541790892949" TEXT="speziell..." VSHIFT="3">
|
||||
<arrowlink COLOR="#677dde" DESTINATION="ID_1099820897" ENDARROW="Default" ENDINCLINATION="-64;0;" ID="Arrow_ID_791650338" STARTARROW="None" STARTINCLINATION="18;42;"/>
|
||||
<icon BUILTIN="info"/>
|
||||
<node CREATED="1541546209896" ID="ID_1049660229" MODIFIED="1541546245931" TEXT="Kind: _CHILD_<typ>.<cnt>">
|
||||
<node CREATED="1541546489419" ID="ID_282481336" MODIFIED="1541546548022" TEXT="automatisch global eindeutig">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
|
|
@ -21156,6 +21161,85 @@
|
|||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
<node CREATED="1541790399905" ID="ID_552609912" MODIFIED="1541790483789">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
aber: zufällige ID macht Objekt-builder <i>stateful</i>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
<arrowlink COLOR="#f63025" DESTINATION="ID_791385927" ENDARROW="Default" ENDINCLINATION="142;6;" ID="Arrow_ID_1321696116" STARTARROW="None" STARTINCLINATION="7;68;"/>
|
||||
<icon BUILTIN="stop-sign"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1541790451266" ID="ID_791385927" MODIFIED="1541790474148" TEXT="Problem auf dieser Ebene nicht lösbar">
|
||||
<linktarget COLOR="#f63025" DESTINATION="ID_791385927" ENDARROW="Default" ENDINCLINATION="142;6;" ID="Arrow_ID_1321696116" SOURCE="ID_552609912" STARTARROW="None" STARTINCLINATION="7;68;"/>
|
||||
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1541790539737" HGAP="19" ID="ID_620633727" MODIFIED="1541790562981" TEXT="explizit zur handhaben" VSHIFT="9">
|
||||
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
<node COLOR="#435e98" CREATED="1541790564379" ID="ID_1099820897" MODIFIED="1541790869503" TEXT="das Problem läßt sich nicht implizit lösen">
|
||||
<linktarget COLOR="#677dde" DESTINATION="ID_1099820897" ENDARROW="Default" ENDINCLINATION="-64;0;" ID="Arrow_ID_791650338" SOURCE="ID_1625379453" STARTARROW="None" STARTINCLINATION="18;42;"/>
|
||||
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
|
||||
</node>
|
||||
<node CREATED="1541790588022" ID="ID_1242220321" MODIFIED="1541790627427" TEXT="Fazit: auf dem ETD-level ignorieren"/>
|
||||
<node CREATED="1541790631410" ID="ID_1544767080" MODIFIED="1541790641506" TEXT="gehört in den Domain-level"/>
|
||||
<node CREATED="1541790656124" ID="ID_279205741" MODIFIED="1541791424072" TEXT="Domain-IDs eindeutig">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
das heißt.
|
||||
</p>
|
||||
<p>
|
||||
die Konstruktion des Domain-Modelles ist dafür zuständig
|
||||
</p>
|
||||
<p>
|
||||
für global eindeutige IDs an den relevanten Stellen zu sorgen
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
<icon BUILTIN="yes"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1541790717726" ID="ID_1884395735" MODIFIED="1541790738652" TEXT="explizites Attribut-Binding">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
...dem man eine EntryID geben kann
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1541790780342" ID="ID_683694576" MODIFIED="1541798900109" TEXT="DSL-Syntax">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#435e98" CREATED="1541790752619" ID="ID_826540621" MODIFIED="1541798905126" TEXT="in ETD-Objekt-Notation">
|
||||
<node CREATED="1541791692837" ID="ID_1036110919" MODIFIED="1541791708256" TEXT="set() geht ohnehin schon mit GenNode-Argument">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node CREATED="1541791710149" ID="ID_1280894882" MODIFIED="1541798914030" TEXT="MakeRec().genNode(ID) ermöglichen!">
|
||||
<arrowlink COLOR="#71cbc9" DESTINATION="ID_80733797" ENDARROW="Default" ENDINCLINATION="49;1;" ID="Arrow_ID_237980791" STARTARROW="None" STARTINCLINATION="22;30;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1541790797595" ID="ID_80733797" MODIFIED="1541798902638" TEXT="für SET / INS Diff-Verben">
|
||||
<linktarget COLOR="#71cbc9" DESTINATION="ID_80733797" ENDARROW="Default" ENDINCLINATION="49;1;" ID="Arrow_ID_237980791" SOURCE="ID_1280894882" STARTARROW="None" STARTINCLINATION="22;30;"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
|
|||
Loading…
Reference in a new issue