Very excited by this idea.  Lot's to think about.  We're on board with most
of it and are ready to help.

Cheers,
Brendan

On Tue, Apr 10, 2018 at 9:30 AM, Jonathan Druart <
jonathan.dru...@bugs.koha-community.org> wrote:

> Ha, found it!
> https://gitlab.deichman.no/digibib/Koha/commits/circ_rewrite_master
> I was looking at the digibib github repo!
>
>
> On Tue, 10 Apr 2018 at 13:28 Jonathan Druart <jonathan.dru...@bugs.koha-
> community.org> wrote:
>
>> Hi Benjamin,
>>
>> Where is the code of the "working example"?
>>
>> Cheers,
>> Jonathan
>>
>> On Tue, 10 Apr 2018 at 12:04 Benjamin Rokseth <
>> benjamin.roks...@deichman.no> wrote:
>>
>>> Community hackers,
>>>
>>> on hackfest I got introvertly enthusiastic about the concept of a Koha
>>> Core, and
>>> about time I shared some thoughts.
>>>
>>> Background: Deichman (Oslo Public Library) is heavily leaning on
>>> bleeding edge Koha
>>> development (REST, Objects, Auth, NCIP and such) and, like at least some
>>> others, maintain
>>> a lot of local patches to tweak Koha into our users needs. Some are
>>> probably interesting to
>>> Community, others not. Now to keep everything in sync with Community
>>> would be amazing,
>>> but not likely to happen anytime soon.
>>>
>>> Great work has been done on refactoring Koha (new namespace, Koha
>>> Objects and REST api, etc.),
>>> but we'd like to suggest one more - a Koha core.
>>> The idea is simple: borrow from object oriented languages, java, or
>>> actually more ruby, since
>>> we're dealing with a dynamic language, use class/module inheritance and
>>> method overrides.
>>> Perl has the "use parent" concept which simplifies
>>> inheritance/subclassing and allows for
>>> nested overrides.
>>>
>>> As an example we refactored the current circulation in Koha, since this
>>> for us is the core
>>> functionality that we depend on and need to hook our local quirks on top
>>> of.
>>> An attempt to illustrate:
>>>
>>> +------------+
>>> | Core::Main |
>>> +--^---------+
>>>    |
>>> +--+----------------+
>>> | Core::Prefs       |
>>> | Core::Exceptions  |                +-----------------------+
>>> | Core::Circulation <-----+------+---| Deichman::Circulation |
>>> | ...               |     |      |   +---^-------------------+
>>> +-------------------+     |      |       |
>>>                           |      |       |
>>>        +------------------+------+       +--------------------------+
>>>        | Core::Circulation::SIP  |       |Deichman::Circulation::SIP|
>>>        +------------------------------------------------------------+
>>>                                  |        use parent qw(
>>>                                  |          Deichman::Circulation
>>>           +----------------------+          Core::Circulation::SIP
>>>           | Core::Circulation::UI|        )
>>>           +----------------------+
>>>                                  |
>>>                                  ~
>>>
>>> * Core::Main is simply an empty class that act as a parent for any
>>> child, including Core::Circulation.
>>> * Core::Circulation has a constructor that takes koha objects item and
>>> library, optionally patron
>>>   and sysprefs overrides. It can have accessors such as checkout,
>>> messages and other things needed for
>>>   intra, SIP or whatever. It has methods Checkin, Checkout and Renew,
>>> amongst others.
>>> * then: Deichman::Circulation::SIP in this example is a local override
>>> that inherits from parents
>>>   Deichman::Circulation and Core::Circulation::SIP
>>>
>>> now the beauty of this is that Deichman::Circulation::SIP can override
>>> anything (even the constructor)
>>> without touching any of the core code, and perl will traverse the
>>> inheritance tree until it finds the
>>> first matching constructor and method.
>>>
>>> Pros:
>>>   - simpler, more readable and more reusable code.
>>>   - local adaptations are easy to hande, and reusable for others
>>>   - the slight overhead of using blessed objects and inheritance is
>>> easily gained by the fact that any
>>>     operation will only need fetching Koha objects once
>>> (item,library,patron etc) instead of refetching
>>>     them numerous times spread across methods calls and loops
>>>   - way less db calls if done right, faster Koha
>>>   - no more C4::Context, hopefully
>>>   - systempreferences can be dramatically reduced, since most of them
>>> are about overrides anyways
>>>   - can be done incrementally, replacing one functionality at a time
>>>
>>> cons:
>>>   - refactoring doesnt make end users happy (but needs to be done in any
>>> case)
>>>   - a bit of work to keep templates happy
>>>   - requires a basic understanding of oop
>>>
>>> So to sum up: We already have a working example for circulation (though
>>> not in production)
>>> that we can demonstrate. It reimplements basically the entire
>>> C4::Circulation, just some small
>>> parts missing. So it can be done.
>>>
>>> But we'd love to hear second opinions from the community! We know the
>>> fear for breaking changes, but
>>> its neither scary or complicated to implement!
>>>
>>> Benjamin Rokseth
>>> Oslo Public Library
>>> _______________________________________________
>>> Koha-devel mailing list
>>> Koha-devel@lists.koha-community.org
>>> http://lists.koha-community.org/cgi-bin/mailman/listinfo/koha-devel
>>> website : http://www.koha-community.org/
>>> git : http://git.koha-community.org/
>>> bugs : http://bugs.koha-community.org/
>>>
>>
> _______________________________________________
> Koha-devel mailing list
> Koha-devel@lists.koha-community.org
> http://lists.koha-community.org/cgi-bin/mailman/listinfo/koha-devel
> website : http://www.koha-community.org/
> git : http://git.koha-community.org/
> bugs : http://bugs.koha-community.org/
>



-- 
---------------------------------------------------------------------------------------------------------------
Brendan A. Gallagher
ByWater Solutions
CEO

Support and Consulting for Open Source Software
Installation, Data Migration, Training, Customization, Hosting
and Complete Support Packages
Office: Portland, OR - Office: Redding, CT
Phone # (888) 900-8944
http://bywatersolutions.com
i...@bywatersolutions.com
_______________________________________________
Koha-devel mailing list
Koha-devel@lists.koha-community.org
http://lists.koha-community.org/cgi-bin/mailman/listinfo/koha-devel
website : http://www.koha-community.org/
git : http://git.koha-community.org/
bugs : http://bugs.koha-community.org/

Reply via email to