It was recently discussed in another thread in this group, I am
paraphrasing, You need to spend time making sure your data Models
are well thought out before you worry about where the code goes.
A typical way to solve the website order problem is that you have
Models for logical grouping of data with relationships (belongsTo,
hasmany, HABTM, etc) between these models. For example, I would
have a products model, for list of products for sale; an inventory
model, for current inventory, price, shipping, etc; an order model,
for orders; an orderItem model, for a list of items per order; a
customer model; Just to name a few. Depending on the complexity,
this could easily get to 20, 30 or 100 models. All of these
specific, so you don't have 1-2 model trying to do everything.
The controllers then take the actions for the users and use the
models to update their data. Things like, changing inventory
counts, or adding orders, updating order status, from pending,
processing, shipped, delivered, etc.
The views and the controllers can also provide different looks at
the data based on the role of the user. The person placing the
order can see some information about the order, price, etc. But,
the shipping department may only see details about the order need to
pack and ship. They don't need to see price. The sales department
may see price, qty and other information to help place orders.
If you lay out the data correctly, I would expect to see more small
to medium size models, rather than a few large ones. Because if you
think about it, you don't need to copy the data for each different
group. Just give them a different view of the parts they need to do
their job.
my $0.02.
bill
On 6/24/2012 9:40 PM, godjen99 [via
CakePHP] wrote:
So I have been
working with CakePHP a while now, and feel pretty comfortable
with it. I get the common ideas of MVC, but recently ran into a
situation at work that I can't put my finger on how to tackle.
The company I work for wants to build a very large application
that consists of many procedures when something takes place.
So I'll use an website that sells things as an example to try to
illustrate the issues I'm seeing.
When someone orders
an item, many things happen. For example, the item is removed
from the inventory. Then the inventory is then checked to see
how low it is, if it's too low then an email fires off to the
company telling of the issue. The order is them charged to the
customer and the order's status is set to be "shipped", which
another department monitors.
Later in the item's
life cycle, the order's status is set to "completed" and a list
of things happen, making up another process.
So here's the
problems I'm facing. Should I store this logic in a behavior, a
component or a model? I'm afraid of the model getting too fat. I
can see MANY functions being built in the model, which would
then make for a messy model; only in the sense of size (3000
lines or more), not the actual code.
So some of
the ideas kicked around is putting them in a behavior (which
I'm not sure if that kind of logic would go there as it's
coupled to the Item model only), or maybe in a component
that relies on models (which I think breaks Cake's
convention), or in custom vendor classes or maybe even
making pseudo models for functionality. For example there's
an Item model, then a ShippedItem model and maybe a
CompletedItem model, with the thought being the logic behind
getting any of those things would be stored in it's own
model versus the Item model holding the logic for getting a
shipped, completed and un-ordered item. I'm shooting for
logic separation and a loose coupling as possible.
Moreover,
I'm trying to think of where the code that would be called
to execute all the separate processes would go. For
example,
when I want to "ship an item by ID" (taking a single item
and doing all the steps needed to make it "shipped"), I'm
not sure wehre to put the "main" function that would call
all the sub-functions to make that process.
I'm very
open to suggestions and would love to hear some feed
back.
--
Our newest site for the community: CakePHP Video Tutorials
http://tv.cakephp.org
Check out the new CakePHP Questions site http://ask.cakephp.org
and help others with their CakePHP related questions.
To unsubscribe from this group, send email to
[hidden email]
For more options, visit this group at
http://groups.google.com/group/cake-php
If you reply to this email, your
message will be added to the discussion below:
http://cakephp.1045679.n5.nabble.com/Concepts-I-m-still-not-sure-of-tp5708990.html
To start a new topic under CakePHP, email
[email protected]
To unsubscribe from CakePHP, click
here .
NAML
--
View this message in context:
http://cakephp.1045679.n5.nabble.com/Concepts-I-m-still-not-sure-of-tp5708990p5708993.html
Sent from the CakePHP mailing list archive at Nabble.com.
--
Our newest site for the community: CakePHP Video Tutorials
http://tv.cakephp.org
Check out the new CakePHP Questions site http://ask.cakephp.org and help others
with their CakePHP related questions.
To unsubscribe from this group, send email to
[email protected] For more options, visit this group at
http://groups.google.com/group/cake-php