I must have missed new developments, I am still working with RM 1.0.3 which, I was thinking, is the production version

My remarks were for that version, and for my idea, there were some inconveniences in it.

But I will study the new RM, and if I find some similar inconveniences, I report them.

This is a bit another subject, but I explain it anyway, because last weekend, I was not satisfied about my emails
Please let me explain why it is an important problem to me.

Maven (Java dependency tool) gets grumpy about circular library references, and the Golang compiler does accept circular package references and restricts using circular struct references. C++ does not accept circular class references, but can be worked around in a tricky way.

Circular references

The Dependency Rule says that source code dependencies can only point inwards. Nothing in an inner circle can know anything at all about something in an outer circle. In particular, the name of something declared in an outer circle must not be mentioned by the code in an inner circle. That includes, functions, classes. variables, or any other named software entity. As you move inwards the level of abstraction increases. The outermost circle is low level concrete detail. As you move inwards the software grows more abstract, and encapsulates higher level policies.

Robert C Martin.

Terminologyservice needs codephrase, and codeprase is part of the datatypes, dvtext (also datatype) needs terminologyservice (in constructor). (circular reference) Other datatypes, for example, dvtext also need a ready compiled terminologyservice and codephrase for checking the charset and language in the constructor This situation makes it impossible to separate the terminologyservice from the datatypes, although they have no similar abstraction level In OpenEhr this is solved by using an interface of terminologyService inside the support-part, and that would be a good solution if the interface did not have the codephrase also in its declarations. So it did not solve it the violation of the dependency rule, but it makes it compilable.

So it is a problem, and causes dirty code to solve. The solution is simple. Make CodePhrase a part of TerminologyService and remove it from datatypes. Then all classes which need code-phrase have to link in terminologyservice, but terminology can be compiled independently from other classes

The most inner circle of the dependencies should be a group libraries/classes which do not need each other by the route of an outer circle. The most inner group should be AOM, TerminologyService, EHR-RM, around that should be the Support, and around that should be the datatypes. Then there would be no problem, the datatypes can be linked against every library and will never cause a circular reference.

Best regards
Bert

_______________________________________________
openEHR-technical mailing list
[email protected]
http://lists.openehr.org/mailman/listinfo/openehr-technical_lists.openehr.org

Reply via email to