Hi Uvindra,

On Mon, Oct 31, 2016 at 1:54 PM, Uvindra Dias Jayasinha <[email protected]>
wrote:

> +architecture
>
> This initially began as an internal APIM discussion for avoiding hard
> coded dependencies within the code we are writing for C5 to make them more
> unit testable(Being able to do dependency injection[1]). But as suggested
> by Akila I think this is a good thing to talk about publicly as all
> products can benefit.
>
> Akila suggested using something like Google Juice[2] for this purpose. Im
> +1 for using this. Would like to here your thoughts on this.
>
> [1] https://www.youtube.com/watch?v=IKD2-MAkXyQ
> [2] https://github.com/google/guice
>
>
> On 31 October 2016 at 13:06, Uvindra Dias Jayasinha <[email protected]>
> wrote:
>
>>
>>
>>> *The solution*
>>>> Pass an instance of the interface to the heavy weight resource as a
>>>> constructor parameter to the class that needs to use it. So in this case it
>>>> should be,
>>>>
>>>> public APIConsumerImpl(ApiDAO apiDAO, ApplicationDAO appDAO,
>>>> APISubscriptionDAO apiSubscriptionDAO) {
>>>>     this.apiDAO = apiDAO;
>>>>     this.appDAO = appDAO;
>>>>     this.apiSubscriptionDAO = apiSubscriptionDAO;
>>>> }
>>>>
>>>> Passing it this way means we can now provide a mock implementation of
>>>> the DOA interfaces when constructing the Consumer and Provider classes
>>>> using a library such as mockito[1] and easily write unit tests.
>>>>
>>>
+1 for above constructor to be used in unit tests. But I don't think we can
use the same for real use. For that, we can have a default constructor as
well, so that clients don't need to worry about injecting DAO dependencies.

public APIConsumerImpl() {
    this.apiDAO = DAOFactory.getApiDAO();
    this.appDAO = DAOFactory.getAppDAO();
    this.apiSubscriptionDAO = DAOFactory.getSubscriptionDAO();
}

Thanks,

-- 
*Bhathiya Jayasekara*
*Senior Software Engineer,*
*WSO2 inc., http://wso2.com <http://wso2.com>*

*Phone: +94715478185 <%2B94715478185>*
*LinkedIn: http://www.linkedin.com/in/bhathiyaj
<http://www.linkedin.com/in/bhathiyaj>*
*Twitter: https://twitter.com/bhathiyax <https://twitter.com/bhathiyax>*
*Blog: http://movingaheadblog.blogspot.com
<http://movingaheadblog.blogspot.com/>*
_______________________________________________
Architecture mailing list
[email protected]
https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture

Reply via email to