[ https://issues.apache.org/jira/browse/MNG-8490?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17916628#comment-17916628 ]
Guillaume Nodet commented on MNG-8490: -------------------------------------- So here are a few arguments: * decoupling is usually done through abstraction. Even if C++ has no concept of interface, it can defines pure abstract classes and support multiple inheritance. Interfaces were seen as an improvement over this pattern a few decades ago IIRC. * testing by using mocking requires abstraction, it's much more difficult to achieve without that * your argument about looking at the code and checking if there are multiple implementations only works in a closed environment, where you actually know all implementations. Maven can be extended through custom syntaxes, but plugin configuration is represented by {{{}XmlNode{}}}. If we were to support yaml, I can easily think about an {{XmlNode}} implementation backed by a yaml node that has been returned by a parser. So imho, this argument does not hold. People may want to provide their own implementation for unforeseen reasons, and I prefer adding an abstraction now that can be used later, rather than not adding it and having no way to extend when the time comes. Anyway, if you propose a PR which fixes the various problems raised in the other one, we can continue the discussion: {quote} A few points need to be addressed: * no third party dependency in the API * no dependency on plexus-xml, this would re-create a cyclic dependency * use an interface + builder api, similar to other data classes in the API * the merge code needs to be abstracted and decoupled using a service interface so that it can be used from plugins (they are only provided with the API jars) For the merge service, maybe using a factory using {{ServiceLoader}} if we want to make that generally available. However, if we only target plugins, a service accessible from the {{Session}} could actually be used. But we do have plugins that use {{Xpp3Dom.mergeXpp3Dom}} so that feature cannot be removed from the API. {quote} > Combine XmlNode and XmlNodeImpl > ------------------------------- > > Key: MNG-8490 > URL: https://issues.apache.org/jira/browse/MNG-8490 > Project: Maven > Issue Type: Improvement > Reporter: Elliotte Rusty Harold > Priority: Blocker > Labels: up-for-grabs > > Single use interfaces are an antipattern. Make everything simpler by having a > single concrete XmlNode class. -- This message was sent by Atlassian Jira (v8.20.10#820010)