On Mon, Jun 16, 2014 at 12:04 PM, Remko Popma <remko.po...@gmail.com> wrote:

>
> On 2014/06/17, at 0:40, Ralph Goers <ralph.go...@dslextreme.com> wrote:
>
> From the Map perspective it may not be better. But from the perspective of
> abstracting how individual Plugins are created it probably is better.
>  Remember, this is for allowing some sort of programmatic configuration,
> such as a configuration file written in Groovy. I find the idea of that
> kind of configuration actually creating Appenders, Layouts, etc, directly
> very scary.
>
>
> For programmatic configuration, why wouldn't you just call a constructor?
>

Because the ctor is private and the factory method is public?

Gary


>
>
> Ralph
>
> On Jun 16, 2014, at 8:36 AM, Remko Popma <remko.po...@gmail.com> wrote:
>
>
>
> On Tuesday, June 17, 2014, Ralph Goers <ralph.go...@dslextreme.com> wrote:
>
>> Yes, for a programmatic configuration builders would be better. Unless,
>> of course, we came up with some other way for programmatic configurations
>> to interact with plugins.  For example, a method like
>>
>> T createPlugin(PluginType type, Map<String, Object> map)
>>
>> might make more sense.  Then it wouldn’t much matter whether we are using
>> builders or the factory pattern.
>>
>
> Is that really better? Personally I try to avoid map-like APIs as it puts
> the burden on the user to know what keys to use and what value types are
> acceptable.
>
> Plus you lose the compiler-check benefits of the factory pattern.
>
>>
>> Ralph
>>
>> On Jun 16, 2014, at 8:12 AM, Matt Sicker <boa...@gmail.com> wrote:
>>
>> Programmatic configuration is feature in that list of issues Ralph
>> mentioned. I don't see any good way to do that without using the fluent
>> builder pattern as that's how programmatic configuration APIs are usually
>> done. The other ways are usually things like closures/lambdas, but that
>> would require Java 1.8+ to work. Groovy supports closures which is what
>> makes Gradle so much less verbose, so that, too, is an alternative way to
>> support builders.
>>
>> I guess the important thing to consider here is that the builders aren't
>> for _plugins_, but are for plugin _configurations_. That makes me think
>> that the factory methods (whether they be private or public) should be far
>> more generic such as accepting a PluginConfiguration object (each specific
>> to the plugin) or a generic Map<String, Object> that also makes it a lot
>> simpler to pass in plugin attributes.
>>
>>
>> On 16 June 2014 10:05, Gary Gregory <garydgreg...@gmail.com> wrote:
>>
>> Right, so they are not part of the public API, unless we consider
>> programmatic configuration (not from a file).
>>
>> Gary
>>
>>
>> On Mon, Jun 16, 2014 at 10:56 AM, Remko Popma <remko.po...@gmail.com>
>> wrote:
>>
>> Paul this is about the plugin factory methods that are called by the
>> PluginManager to turn a configuration text file into an object hierarchy
>> with Loggers, Appenders, etc.
>> It would be very rare for client code to call these methods directly.
>> Which is why they are primarily called from JUnit tests.
>>
>>
>> On Mon, Jun 16, 2014 at 11:45 PM, Paul Benedict <pbened...@apache.org>
>> wrote:
>>
>> If this API is primarily for unit tests, then I don't care as much. I
>> thought this was Public API. When it comes to Public API, I prefer to make
>> it as friendly-to-read and maintainable as possible.
>>
>>
>> Cheers,
>> Paul
>>
>>
>> On Mon, Jun 16, 2014 at 9:42 AM, Remko Popma <remko.po...@gmail.com>
>> wrote:
>>
>> About the validation, wasn't the argument that some of the current JUnit
>> tests look like this?
>> FileAppender.createAppender("true", "true", "true", "true", "true",
>> "true", "true", "4096", null, null, "false", null, null);
>>
>> So, null is fine here for at least four arguments.
>> So it is definitely possible to forget to call the
>> builder.setValue(value) method for those arguments
>>  - which is fine if your intention was to set null, but not if you forgot
>> to set some non-null value.
>>
>> The compiler validates that you have the right number of arguments for
>> free.
>> It is not possible for builders to provide the same guarantee unless all
>> arguments must be non-null.
>>
>> About the readability - and as Ralph pointed out this is readability in
>> JUnit code primarily - there are a number of ways to accomplish that.
>>
>>
>>
>> On Mon, Jun 16, 2014 at 11:27 PM, Ralph Goers <ralph.go...@dslextreme.com
>> > wrote:
>>
>>
>


-- 
E-Mail: garydgreg...@gmail.com | ggreg...@apache.org
Java Persistence with Hibernate, Second Edition
<http://www.manning.com/bauer3/>
JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
Spring Batch in Action <http://www.manning.com/templier/>
Blog: http://garygregory.wordpress.com
Home: http://garygregory.com/
Tweet! http://twitter.com/GaryGregory

Reply via email to