[wp-hackers] Meta tables: Take 5
Mike Schinkel
mikeschinkel at newclarity.net
Mon Jul 27 15:25:04 UTC 2009
LOL, what a typo!
"When that pattern dies, " should have been "When that pattern does
(emerge), "
-Mike Schinkel
WordPress Custom Plugins
http://mikeschinkel.com/custom-wordpress-plugins/
On Jul 27, 2009, at 10:57 AM, Mike Schinkel wrote:
> Thanks for that long answer, but I still did not hear a viable
> alternate to CRUD, only some hypothetical panacea.
>
> In my development experience (which spans 20 years now) I've gone
> from strong believing in abstracted solutions to learned belief that
> abstraction for abstraction sake is bad and it's better to stay
> closer to the metal unless and until a true pattern emerges. When
> that pattern dies, it should ideally implement in the language (i.e.
> the "foreach" iteration pattern vs. "for" with counter variables) or
> it that can't happen then in language's library or lastly in a
> framework like WordPress' core. As far as I can see, the only true
> pattern visible is CRUD. Something better may come along but I have
> yet to see it.
>
> Simpler is better.
>
> -Mike Schinkel
> WordPress Custom Plugins
> http://mikeschinkel.com/custom-wordpress-plugins/
>
>
>
>
> On Jul 27, 2009, at 3:17 AM, Jacob Santos wrote:
>
>> What is good is not requiring the user of the API to realize the DB
>> table scheme or understand how the DB table works. I think the
>> Taxonomy API is a good example, if the whole concept wasn't so
>> difficult to understand in the first place. I think the better
>> solution is to abstract the DB entirely from the API user and build
>> the API that is built on top of it.
>>
>> The problem I have with CRUD, is that it forces the developer to
>> know the DB scheme or at least understand the scheme. It seems to
>> be taking the easy way out, "Well, I could create an API that
>> doesn't force the developer using the API to know anything about
>> the scheme, but meh, I lika the shiny and don't want to spend too
>> much time developing something."
>>
>> In my experience, it requires the user of the API to know too much
>> information is not important. Likewise, if the Scheme changes, then
>> the API must change and all code that uses CRUD most change as
>> well. If you are trying to create an API that doesn't require
>> hassling the developer working on the API and the user of the API
>> to keep up with the changes, then why use something that either
>> puts the workload on the user ("Oh crap, the API breaks backward
>> compatibility again because of scheme changes.") or on the
>> developer ("Well, I could make refactor the design to where it
>> doesn't suck, but doing so will either break backwards
>> compatibility or cause me to work around a lot of my previous
>> scheme and coding mistakes.").
>>
>> As for the proper solution, I've yet to find one that doesn't
>> suffer from similar flaws or new ones. BREAD suffers from the same
>> reasons of CRUD. I've discovered that the architecture should be a
>> layer on top of the DB that abstracts the table scheme as well as
>> any changes. Looking at how WordPress implements wp_insert_post()
>> and wp_update_post(), I can say that that is far better than any
>> design I've seen and have so far implemented. Actually, I have
>> sinced strived to implement my APIs like wp_insert_post() and
>> wp_update_post() in that inserting into tables uses CRUD or BREAD
>> (I'm not so sure ORM or the others are any better or worse, just
>> solves a different problem or the same problem differently).
>>
>> So the underlying DB implementation uses CRUD or BREAD or whatever
>> pattern or fad everyone is using this year, but the API above it is
>> not. So I suppose what I mean to say is that I'm not in favor of
>> forcing the user of the API to use CRUD, but okay for the developer
>> to do so in order to Get Shit Done and build an API that the user
>> can understand quickly and easily.
>>
>> I think at the end of the day, if the choice is Getting Shit Done
>> or Getting Shit Done right, which also means never, then I'll
>> choose to have something rather than nothing. Which is why I keep
>> having to kick myself in an attempt to not say anything stupid and
>> take away from something that in all regards is actually pretty
>> kick ass.
>>
>> Jacob Santos
>>
>>
>>
>> On Sun, 26 Jul 2009 21:41:30 -0500 (CDT)
>> Mike Schinkel <mikeschinkel at newclarity.net> wrote:
>>
>>> Jacob,
>>>
>>> I'm curious; if CRUD is bad, what is good?
>>>
>>> -Mike Schinkel
>>> Custom Wordpress Plugins
>>> http://mikeschinkel.com/custom-wordpress-plugins
>>>
>>> ----- Original Message -----
>>> From: "Jacob Santos" <wordpress at santosj.name>
>>> To: wp-hackers at lists.automattic.com
>>> Sent: Sunday, July 26, 2009 10:24:20 PM GMT -05:00 US/Canada Eastern
>>> Subject: Re: [wp-hackers] Meta tables: Take 5
>>>
>>> Well, I think it is fine, except for object_id doesn't really have
>>> an explanation. Why not $id, instead? The problem is that it
>>> doesn't explain what the object part is, so it can be anything. It
>>> is the ID of the type you are looking for, so post, comment,
>>> category, etc. Why not just name it ID and leave out the question
>>> of what 'object' means. People understand what ID means.
>>>
>>> I'm not trying to argue against CRUD, I just wish another pattern
>>> or architecture was choosen for WordPress. CRUD is very simple and
>>> quick to implement. I just shudder every time I see it within
>>> WordPress and within my own code (papa doesn't like spending
>>> forever on "proper" design). Therefore, I'm trying to not argue
>>> CRUD in a wierd way, but still say it sucks and I very much hate it.
>>>
>>> Jacob Santos
>>>
>>> On Mon, 27 Jul 2009 03:17:30 +0300
>>> scribu <scribu at gmail.com> wrote:
>>>
>>>> On Mon, Jul 27, 2009 at 12:21 AM, Jacob Santos <wordpress at santosj.name
>>>> >wrote:
>>>>
>>>>> CRUD in procedural form. Alas, it seems flawed somehow. The
>>>>> look, the feel;
>>>>> The wonder about how to make it better. Is there such a solution?
>>>>>
>>>>> It seems a pity to look at something so beautiful in its
>>>>> simplicity and
>>>>> then ask why? What purpose is there to mock something that
>>>>> should be so
>>>>> clerished and loved and yet not provide another?
>>>>>
>>>>> Not that objects are any better, just better organized. A shame
>>>>> really.
>>>>>
>>>>> I do cry every time I see CRUD.
>>>>>
>>>>> Good work nevertheless. I hope you choose to name the parameters
>>>>> better.
>>>>> There is a concept called, "Self-documenting Code" that is just
>>>>> plain
>>>>> awesome in its beauty and soft skin.
>>>>>
>>>>> Jacob Santos
>>>>>
>>>>
>>>>
>>>> Thanks for the comment - very poetic, but not really helpful.
>>>>
>>>> Don't know how I could rename the parameters to be more self-
>>>> documenting
>>>> than they already are. Metaphors maybe? :)
>>>>
>>>>
>>>> --
>>>> http://scribu.net
>>>> _______________________________________________
>>>> wp-hackers mailing list
>>>> wp-hackers at lists.automattic.com
>>>> http://lists.automattic.com/mailman/listinfo/wp-hackers
>>>
>>>
>>> --
>>> Jacob Santos <wordpress at santosj.name>
>>>
>>> _______________________________________________
>>> wp-hackers mailing list
>>> wp-hackers at lists.automattic.com
>>> http://lists.automattic.com/mailman/listinfo/wp-hackers
>>> _______________________________________________
>>> wp-hackers mailing list
>>> wp-hackers at lists.automattic.com
>>> http://lists.automattic.com/mailman/listinfo/wp-hackers
>>
>>
>> --
>> Jacob Santos <wordpress at santosj.name>
>>
>> _______________________________________________
>> wp-hackers mailing list
>> wp-hackers at lists.automattic.com
>> http://lists.automattic.com/mailman/listinfo/wp-hackers
>
> _______________________________________________
> wp-hackers mailing list
> wp-hackers at lists.automattic.com
> http://lists.automattic.com/mailman/listinfo/wp-hackers
More information about the wp-hackers
mailing list