Search the web
Sign In
New User? Sign Up
AgileEmbedded · Agile Embedded
? Already a member? Sign in to Yahoo!

Yahoo! Groups Tips

Did you know...
Want to share photos of your group with the world? Add a group photo to Flickr.

Best of Y! Groups

   Check them out and nominate your group.
Having problems with message search? Fill out this form to ensure your group is one of the first to be migrated to the new message search system.

Messages

  Messages Help
Advanced
Understanding Model-Conductor-Hardware pattern   Message List  
Reply | Forward Message #135 of 464 |
Re:Understanding Model-Conductor-Hardware pattern


Thad,

I'll try to answer your questions as well as I can. We're pretty
excited that there's some discussion starting on this topic. Pardon
the length of what I've written here. I wanted to preserve for
posterity a decent explanation of these ideas for anybody who might
come across this.

First, let me clarify some things regarding MVP. The ideas associated
with it are fairly simple. However, there's a variety of
interpretations on how to use it and what the fine details of each
component are. The following is how we use it in a simplified form.

In MVP, the Model encapsulates the business logic and system state
segregated from the user interface (it "models" the system the UI
gives access to). We agree it's a bit generic of a term. We used it
in MHC because of the precedent of the language associated with Model
View Controller and Model View Presenter.

In MVP, the View is the thin wrapper around the GUI widgets and
forms. It contains as little logic as possible. For sake of testing,
this allows the widgets to be mocked or simulated so that the
presentation and business logic can be tested without widgets on screen.

In MVP, the Presenter, as opposed to the Model, encapsulates the
presentation logic. The Model is the system's business logic. The
Presenter is the GUI logic. That is, the Presenter receives events
from the View and makes decisions about what actions to initiate on
the View and Model in response. That a button press saves a file and
disables the save button is the Presenter's responsibility. It
receives the button click event and then tells the View to gray out
the save button and tells the Model to save the open file.

So, Model-View-Presenter translates to 'Business Logic'-'GUI
Widgets'-'GUI Logic'. Separating business logic and presentation
logic makes for cleaner, more flexible design and good testing.

Things get a bit more complicated when you start assembling a system
of multiple MVP triplets. Sometimes you need translators between
layers and in anything but the simplest of systems you must start
tying together models. But the above description captures the
essentials.

We've found that in Agile fashion, stories map very, very well to
Presenters. A customer usually talks about their actions in terms of
a user interface. So, in GUI or Web applications, we start with
Presenters to build the app a little bit at a time. The presentation
logic (stories) within the Presenter demonstrates what needs to
happen in the View and Model. Starting with Presenter tests first,
the Model and View can be mocked out and then implemented later as
more tests and more of the system are fleshed out. We refer to this
approach as Presenter First. It helped form our thoughts on Model-
Conductor-Hardware to a degree.

For more on Presenter First, see the following. The first is our
repository for Presenter First resources. The second is an excellent
webcast video by Brian Marick on the topic. Brian has been working
with us on a Presenter First article to appear in Better Software in
February 2007.

http://www.atomicobject.com/pages/Presenter+First
http://www.testing.com/cgi-bin/blog/2007/01/05#wireframe2

We tried something clever that may have been a bad move in naming
Model-Conductor-Hardware. The Conductor corresponds to the Presenter.
Because we've found the Presenter to be central to the TDD process
(Presenter First), we felt its corresponding component, the
Conductor, really should be at the center of the triad name. Hence
the naming order. In hindsight this may not have been a good move as
it's confused people.

Model == Model
Conductor == Presenter
Hardware == View

So, to answer your central question, the value of the Conductor in
Model-Conductor-Hardware is that it allows the hardware control logic
to be segregated from the business logic. By testing the Conductor,
hardware conditions and event handling (interrupts, etc.) can be
tested apart from the data handling and number crunching logic of the
Model. This yields better design and easier testing.

Let me give you an example. Imagine an embedded system that processes
temperature. The Hardware layer wraps the temperature sensor and the
timer that triggers temperature reading (the wrapping is to make unit
testing possible in the first place, of course). The Conductor
handles timer events and asks the hardware for raw temperature
values. The Conductor then hands that raw data off to the Model to
calculate a temperature. A subsequent, similar process for displaying
the temperature can be imagined. The logic for handling the hardware
can be tested apart from the math that processes the temperature.
This is far better than verifying temperature processing code with
heat guns and compressed air cans. While it's true you could possibly
eliminate the Conductor, we've consistently found that isolating
functionality always yields unexpected gains because of the
decoupling it provides. So, we offer that segregating hardware
handling logic (Conductor) from business logic (Model) is the best
way to go.

We've been talking all about unit testing thus far. An added benefit
of the MHC pattern is that it can make system testing much easier. By
testing the hardware and business logic separately, test fixtures can
be created and hooks made into the Hardware layer that allow hardware
related problems (either programming misunderstandings or board
design issues) to be found and solved much more quickly than in
traditional firmware development.





Thu Jan 11, 2007 4:03 pm

mkarlesky
Offline Offline
Send Email Send Email

Forward
Message #135 of 464 |
Expand Messages Author Sort by Date

I just joined this group after seeing a message on comp.software-eng by Mike Karlesky. I followed some links he provided and found an interesting article,...
Thad Smith
thadsmith3
Offline Send Email
Jan 10, 2007
6:22 am

Thad, I'll try to answer your questions as well as I can. We're pretty excited that there's some discussion starting on this topic. Pardon the length of what...
Michael Karlesky
mkarlesky
Offline Send Email
Jan 11, 2007
4:11 pm

... I think the something (Hardware or Conductor) might want to hide the hardware a little more by normalizing the temperature. so the model deals with...
James Grenning
jwgrenning
Offline Send Email
Jan 11, 2007
5:14 pm

... The intent of the MHC pattern is to allow for maximum automated testability; it does this by decoupling hardware from code. In MVP the same thing is...
mkarlesky
Offline Send Email
Jan 12, 2007
3:50 am

I like the comparison of MHC to MVP and have found that analogy useful before. I agree that you want a very thin layer covering the hardware. I also think...
James Grenning
jwgrenning
Offline Send Email
Jan 12, 2007
4:55 am

... from current website: » Unity – embedded unit test framework for C (released 2008) http://sourceforge.net/projects/embunity/ Doesn't seem to have any...
marktxx
Offline Send Email
Apr 27, 2008
6:51 pm

... » Unity – embedded unit test framework for C (released 2008) http://sourceforge.net/projects/embunity/ Follow the link above and select the 'Code' menu...
Greg Williams
willi297
Offline Send Email
Apr 28, 2008
3:36 am

... That makes sense. ... I can understand that benefit to creating a Presenter in MVP. ... So do two separate modules, business and hardware. ... So do two...
Thad Smith
thadsmith3
Offline Send Email
Jan 12, 2007
2:22 am

... logic ... I think I understand what you mean when you say two separate modules, but perhaps I don't. We think the value of three modules (Model, Conductor,...
mkarlesky
Offline Send Email
Jan 13, 2007
12:48 am

... A thin hardware interface layer, the same, I think, as you use for the H layer, plus the rest in the business layer / application logic. ... I understand...
Thad Smith
thadsmith3
Offline Send Email
Jan 13, 2007
6:47 pm

... the ... understand ... Yes. This is the case. Separating M and C makes things easier to test. The separation ensures that there's no coupling between the...
mkarlesky
Offline Send Email
Jan 21, 2007
3:12 am

In AgileEmbedded@yahoogroups.com <mailto:AgileEmbedded%40yahoogroups.com>, James Grenning <grenning@...> ... The purpose of the hardware layer is to provide...
Rick
rick_clements
Offline Send Email
Jan 13, 2007
8:06 pm

... board.) ... Rick, what you're describing is what we would call unit tests, system tests, and acceptance tests. The MCH pattern makes it possible to unit ...
mkarlesky
Offline Send Email
Jan 21, 2007
3:53 am
Advanced

Copyright © 2009 Yahoo! Inc. All rights reserved.
Privacy Policy - Terms of Service - Guidelines - Help