Re: Gallery's K3 class name/dir/file conventions (was "Capitalization")

Shad Laws <shad-xpYdmXCiSuZWk0Htik3J/[email protected]> Tue, 26 Mar 2013 13:57:56 +0100
Newsgroups gmane.comp.web.gallery.devel
Message-ID <CA+z51A6BZNKModPUU7tMxwosSMySGMj0UiVXxdsctR6Wu1JwqQ@mail.gmail.com>
Hey everyone,

I just finished performing the same class/file move/rename/search/replace
operation on the user module.  Also, I made some tweaks to the gallery
module to reflect this (in particular with IdentityProvider and associated
files) and updated PHPass.

At this point, I *think* all of the files in the gallery and user modules
should talk to each other - all of the interfaces, extensions, classes, and
abstractions seem to be consistent between the two!  All of the
class/filename changes are documented in the Google spreadsheet.  I've also
compiled a little summary at the end of this email.

While this process is fresh in my mind and I'm on a roll, I'm probably
going to the same thing for the rest of the modules before diving into
Formo...

Take care,
Shad

----

How Identity and IdentityProvider got translated (typical cases):

Old class: /modules/gallery/helpers/identity.php --> class identity_Core
New class: /modules/gallery/classes/Gallery/Identity.php --> class
Gallery_Identity
Extension: /modules/gallery/classes/Identity.php --> class Identity extends
Gallery_Identity

Old class: /modules/gallery/libraries/IdentityProvider.php --> class
IdentityProvider_Core
New class: /modules/gallery/classes/Gallery/IdentityProvider.php --> class
Gallery_IdentityProvider
Extension: /modules/gallery/classes/IdentityProvider.php --> class
IdentityProvider extends Gallery_IdentityProvider

How IdentityProvider_Driver stuff got translated (the main driver keeps its
class name):

Old class: /modules/gallery/libraries/drivers/IdentityProvider.php -->
interface IdentityProvider_Driver
New class: /modules/gallery/classes/Gallery/IdentityProvider/Driver.php -->
interface Gallery_IdentityProvider_Driver
Extension: /modules/gallery/classes/IdentityProvider/Driver.php -->
interface IdentityProvider_Driver extends Gallery_IdentityProvider_Driver

Old class: /modules/user/libraries/drivers/IdentityProvider/Gallery.php -->
class IdentityProvider_Gallery_Driver implements IdentityProvider_Driver
New class: /modules/user/classes/User/IdentityProvider/Gallery.php -->
class User_IdentityProvider_Gallery implements IdentityProvider_Driver
Extension: /modules/user/classes/IdentityProvider/Gallery.php --> class
IdentityProvider_Gallery extends User_IdentityProvider_Gallery

How Group_Definition stuff got translated (removed from main driver, given
new class name):

Old class: /modules/gallery/libraries/drivers/IdentityProvider.php -->
interface Group_Definition
New class:
/modules/gallery/classes/Gallery/IdentityProvider/GroupDefinition.php -->
interface Gallery_IdentityProvider_GroupDefinition
Extension: /modules/gallery/classes/IdentityProvider/GroupDefinition.php
--> interface IdentityProvider_GroupDefinition extends
Gallery_IdentityProvider_GroupDefinition

Old class: /modules/user/models/group.php --> class Group_Model_Core
extends ORM implements Group_Definition
New class: /modules/user/classes/User/Model/Group.php --> class
User_Model_Group extends ORM implements IdentityProvider_GroupDefinition
Extension: /modules/user/classes/Model/Group.php --> class
Model_Group extends User_Model_Group

How User_Definition stuff got translated (removed from main driver, given
new class name):

Old class: /modules/gallery/libraries/drivers/IdentityProvider.php -->
interface User_Definition
New class:
/modules/gallery/classes/Gallery/IdentityProvider/UserDefinition.php -->
interface Gallery_IdentityProvider_UserDefinition
Extension: /modules/gallery/classes/IdentityProvider/UserDefinition.php -->
interface IdentityProvider_UserDefinition extends
Gallery_IdentityProvider_UserDefinition

Old class: /modules/user/models/user.php --> class User_Model_Core extends
ORM implements User_Definition
New class: /modules/user/classes/User/Model/User.php --> class
User_Model_User extends ORM implements IdentityProvider_UserDefinition
Extension: /modules/user/classes/Model/User.php --> class
Model_User extends User_Model_User



On 25 March 2013 18:08, Shad Laws <shad-xpYdmXCiSuZWk0Htik3J/[email protected]> wrote:

> Okay, 1 and 2 are done.  Also, the Google spreadsheet is up-to-date with
> all of the changes.
>
> My search'n'replace operation managed to make about 2800 changes!
>  Hopefully that should cut down on wrote tasks down the line :-)
>
> Take care,
> Shad
>
>
> On 25 March 2013 01:17, Bharat Mediratta <[email protected]> wrote:
>
>>
>> All looks good for me.  If you miss a few or get a few wrong it's no big
>> deal, we'll be able to figure them out from context and fix them up.
>>
>>
>> On Sun, Mar 24, 2013 at 3:34 PM, Shad Laws <shad-xpYdmXCiSuZWk0Htik3J/[email protected]> wrote:
>>
>>> Hey Bharat,
>>>
>>> Woohoo - I think we've finally arrived on the same page!  Good
>>> conversation, though... I feel like we both figured out a lot of nuances in
>>> the process.  Onward!
>>>
>>> My roadmap for the near future:
>>> 1. Finish moving around the remaining files in the gallery module
>>> (tonight)
>>> 2. Fire up a module-wide grep to try and autofix as much as I can to
>>> avoid changing every class/file name by hand (tomorrow)
>>> 3. Do the same thing to the user module (next couple days)
>>> 4. Start getting up to speed on Formo (afterward)
>>>
>>> If it helps your workflow, I can invert the order of 2 and 3...
>>>
>>> For #2, I could use a little input.  For class names, I'll grep for the
>>> following patterns (not yet carefully regex-ized, but you get the idea):
>>> 1. class::
>>> 2. new Class
>>>
>>> Also, I'll look for these, but check them one by one:
>>> 1. call_user_func, call_user_func_array
>>> 2. $classvar::
>>> 3. {$foo . "bar"}::
>>> 4. new $foo
>>> 5. new {$foo. "bar"}
>>> 6. class_exists, method_exists
>>>
>>> Additionally, I'll look for other files (media, views), which I think
>>> all occur within double or single quotes.  I may look for View( just to be
>>> sure I got all the views.
>>>
>>> Any others you can think of that'd be useful to grab?
>>>
>>> Take care,
>>> Shad
>>>
>>>
>>> On 24 March 2013 19:34, Bharat Mediratta <[email protected]> wrote:
>>>
>>>>
>>>> On Sat, Mar 23, 2013 at 3:21 PM, Shad Laws <shad-xpYdmXCiSuZWk0Htik3J/[email protected]> wrote:
>>>>
>>>>> If we're sticking with Kohana's functions and not making a
>>>>> wildcard-savvy loader, then this conversation is kinda moot, but for fun...
>>>>>
>>>>> <pseudo-philosophical tangent>
>>>>> I feel like there are three different cases here:
>>>>> 1. Not require a rule. (make the wildcard-savvy loader)
>>>>> 2. Require a rule. (be opinionated and enforce one way to do it)
>>>>> 3. Require a rule and make you define it. (extra line in module.info)
>>>>>
>>>>> While there are certainly arguments why 2 is better than 3, in the
>>>>> general case, it seems like 1 could often be better than 2, no?
>>>>> </pseudo-philosophical tangent>
>>>>>
>>>>
>>>> It's not clear to me when that would be the case - so I worry that it's
>>>> flexibility for flexibility's sake.  I'm ok with that if it doesn't come at
>>>> a cost, but in this case it makes the explanation harder.  For example,
>>>> it's easier for me to say "create modules/tag/classes/TagEvent.php and put
>>>> this in it" vs. saying "create a file in module/tag/classes that ends in
>>>> Event.php, like TagEvent.php and put this in it".  I'd probably just tell
>>>> people to use TagEvent in that case.  So then most people would follow this
>>>> convention - and then what would be the need for a different option?
>>>>
>>>> I'm open to this - just want to understand the value proposition.
>>>>
>>>>
>>>>>  I'm a little mixed on this.  Some thoughts:
>>>>>> - I can't tell if I like the separate subdir or not.  Frankly, that
>>>>>> implies that there's something to separate from, but many modules can do
>>>>>> everything they need to do with just and event handler and a block, etc.
>>>>>>
>>>>>
>>>>> Personally, I do.  To me, it has a similar significance to Controller
>>>>> or Model, in the sense that the names of their functions have special
>>>>> meanings outside of the class itself.  This is not the case, for example,
>>>>> for the Tag.php helper, which is why it shouldn't be in any subdir.
>>>>>
>>>>
>>>> I'm definitely coming around to this idea.  I haven't heard a name that
>>>> I like, yet though.  "Gallery" is used.  "Module" is too close to "Model".
>>>>  "Hook" is the best I've heard but I'm mildly worried that there'll be
>>>> cognitive conflict with the fact that some things inside that directory
>>>> won't be "hooks" per se (tasks, etc).  But the more I think about it the
>>>> more I like it.
>>>>
>>>>
>>>>> I think by now I'm convinced of all points you just made, with the
>>>>> sole exception being the separate directory for Gallery-specific stuff.  I
>>>>> think it gives a meaningful distinction between it and the other stuff.
>>>>>  Also, it'd give us the added benefit of being able to change our mind at a
>>>>> later date should someone decide to build an even-more-optimized,
>>>>> wildcard-capable loader.
>>>>>
>>>>
>>>> Agreed.  Let's go with Hook for now and then if we come up with a
>>>> better name before launch it should be easy to just fix up everything.
>>>>  Onwards!
>>>>
>>>>
>>>>> On a semi-related note, how do we feel about underscores in "views"
>>>>> names?  I like the idea of adding a teeny bit of hierarchy like you did
>>>>> with the Tag example (certainly no more than 1 level), and that removes a
>>>>> decent number of them, but not all.  Example: is
>>>>> /modules/gallery/views/admin/advanced_settings.php fine?  My vote is yes,
>>>>> personally...
>>>>>
>>>>
>>>> Underscores don't seem to mean anything in view names, eg:
>>>>
>>>>   modules/userguide/views/userguide/examples/hello_world_error.php
>>>>
>>>> That'd be loaded as "userguide/examples/hello_world_error.php" as far
>>>> as I can tell.  I can't find good examples of this - but I also don't think
>>>> that it makes sense for it to be "admin/advanced/settings.php" so I also
>>>> vote for "admin/advanced_settings.php".  If we find a better model in the
>>>> future, renaming all this stuff should be easy and backwards compatible.
>>>>
>>>> OK!  I think this means it's time to write some code?  I'm going to get
>>>> going on seeing if I can sort out the IdentityProvider code...
>>>>
>>>>
>>>
>>
>

------------------------------------------------------------------------------
Own the Future-Intel&reg; Level Up Game Demo Contest 2013
Rise to greatness in Intel's independent game demo contest.
Compete for recognition, cash, and the chance to get your game 
on Steam. $5K grand prize plus 10 genre and skill prizes. 
Submit your demo by 6/6/13. http://p.sf.net/sfu/intel_levelupd2d

__[ g a l l e r y - d e v e l ]_________________________

[ list info/archive --> http://gallery.sf.net/lists.php ]
[ gallery info/FAQ/download --> http://gallery.sf.net ]