[Biococoa-dev] Caching the NSArray of BCSymbol

Alexander Griekspoor mek at mekentosj.com
Sat Jul 9 14:36:32 EDT 2005


Ok, let me begin with Charles question what I'm talking about. The  
answer is yes, the sequence can have a delegate and still be a model  
BUT, let me try to convince what I meant with my remark and how we  
can do it in a better way.
First, the model-view-controller (MVC) design pattern. BCSequence is  
our model class, it contains the data. The idea behind this pattern  
is that the model never has any idea about the view its data is  
presented in, and is thus also not responsible for updates, data  
changes etc. This is all controlled by the controller which insulated  
both from each other and keeps both in sync. So if for instance the  
users edits the sequence in the gui, this should be picked up by the  
controller which makes sure the edit is forwarded to the model  
object. Thus, it would not make sense to have the model for instance  
being a delegate of the view, hence bypassing the controller. Also,  
why should the controller be the delegate of the model? The ONLY one  
changing the model is the controller, so if it does it should know  
already right!
Now, I admit there are situations that this is not completely true.  
Imagine a alignment controller A which aligns several sequences and  
communicates this via an alignment view. Now the same sequences could  
potentially be altered by a different controller B which presents the  
user with a standard sequence editing window. Now of course we would  
like controller A to redo the alignment and update the view.  
According to the MVC pattern it would be controller B's task to  
initiate the update of A (via delegation or notification), so  
officially no problem and still no need for the model to contain  
notifications/delegations. Still, sometimes it would be handy to be  
able to monitor the changes made to a model object if multiple  
controllers potentially edit the same model object.
Now what, notifications, delegations. I don't like the idea of  
sending "public" notifications into the air, and remember if we  
create or edit sequences a lot (which you do with model objects),  
this could create a lot of overhead, and could clog the notification  
system). Now delegates is more direct, but then again, you could only  
have one delegate, a severe limit for situations as described above!!  
In addition, in both case to make it work the code (most notable the  
accessors) will have to be polluted with delegation invocations (plus  
a check whether there actually is a delegate, plus a check whether  
the delegate responds to that call) or notification dispatches.  
Luckily there's something better, called Key-value-observing (KVO),  
allowing exactly what you guys are looking for, available in 10.3 or  
higher (now, did we all agree already that 10.3 is our lower limit).  
It's part of the famous "binding" system, and allows controllers to  
register themselves as observers for certain properties of the model  
object and get notifications when these changes so they can do their  
things. Sounds pretty good huh! How does it work? We just have to be  
key-value-coding (KVC) compliant, which we are already, hooray!  
NSObject provides automatic support! If we decide that at somepoints  
we need more control, there are additional methods that can be called  
to trigger observers like didChangeValueForKey. I strongly suggest to  
not go for delegates, not for notifications, but for KVO, which means  
we don't have to do anything, nice huh! Here's more info on KVO:


On 9-jul-2005, at 8:28, Charles Parnot wrote:

> On Jul 8, 2005, at 9:39 PM, Koen van der Drift wrote:
>> On Jul 9, 2005, at 12:19 AM, Charles Parnot wrote:
>>>> Hmm, although certainly nice to have a link between a view and  
>>>> ultimately the sequence, this is the task of a controller class,  
>>>> not the model... The model shouldn't know/care of the view. It  
>>>> might be nice, if we add controllers to the framework that do  
>>>> this though..
>>>> Alex
>>> I am not sure what you both mean. Just to add to the confusion:  
>>> BCSequence can have a delegate and still be a model, no?
>> Why not let BCSequence post notifications when something has  
>> changed? This way it is ot conected to a view, but and any object  
>> (including a controller or a view) can respond to it.
>> - Koen.
> Yes, the standard in Cocoa seems to have both a delegate and  
> accompanying notifications, which the delegate always get without  
> subscribing.
> charles
> --
> Xgrid-at-Stanford
> Help science move fast forward:
> http://cmgm.stanford.edu/~cparnot/xgrid-stanford
> Charles Parnot
> charles.parnot at gmail.com
> _______________________________________________
> Biococoa-dev mailing list
> Biococoa-dev at bioinformatics.org
> https://bioinformatics.org/mailman/listinfo/biococoa-dev

                     ** Alexander Griekspoor **
              The Netherlands Cancer Institute
              Department of Tumorbiology (H4)
         Plesmanlaan 121, 1066 CX, Amsterdam
                    Tel:  + 31 20 - 512 2023
                    Fax:  + 31 20 - 512 2029
                    AIM: mekentosj at mac.com
                    E-mail: a.griekspoor at nki.nl
                Web: http://www.mekentosj.com

       Microsoft is not the answer,
       Microsoft is the question,
       NO is the answer


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.bioinformatics.org/pipermail/biococoa-dev/attachments/20050709/a051f490/attachment.html>

More information about the Biococoa-dev mailing list