|
So I have this class, Apple. There can be many instances of Apple, but only one can be my favorite at any given time. So the question is how best to manage a mutually exclusive property on a collection of objects?
Here’s a potential solution but I don’t know if it’s bad form or not (the meat is in the property-set and uses the static FavoriteApple field).
<br />
public class Apple<br />
{<br />
private static Apple FavoriteApple;<br />
<br />
private bool isFavorite;<br />
<br />
public bool IsFavorite<br />
{<br />
get { return this.isFavorite; }<br />
<br />
set<br />
{<br />
this.isFavorite = value;<br />
<br />
if (value == true)<br />
{<br />
Apple.FavoriteApple.IsFavorite = false;<br />
Apple.FavoriteApple = this;<br />
}<br />
else<br />
{<br />
if (this == Apple.FavoriteApple) Apple.FavoriteApple = null;<br />
}<br />
}<br />
}<br />
}<br />
The question is about the proper use of properties. Is it reasonable to set a property on an instance of a class and have it affect the state of another instance? Intuitively this seems wrong. But how else can you handle the setting of an object property that is by design mutually exclusive amongst all instances of the class?
The most obvious alternative is to leave it to the programmer to somehow enforce the mutual exclusivity. This puts the burden on the programmer and opens up the potential for some serious bugs, but doesn’t do any fishy stuff behind the scenes. Everything is explicit.
Another solution is to remove the "IsFavorite" property from the Apple class all together and us a reference external to the Apple class to keep track of the "favorite" apple. The only problem with this is that if Apple instances are treated differently based on whether or not they are the "Favorite", then the reference to the "Favorite" apple has to be passed around with the Apple instances.
At any rate, the method I've illustrated here works, the only question is does it violate a best practice or coding principle by changing the state of one instance implicitly when changing the state of another instance explicitly.
Thoughts?
|
|
|
|
|
Why do you need an isFavourite member?
Just have your static Apple favourite member, and an IsFavourite property
get { return this == favourite; }
Then you can set the favourite apple to the instance that is your favourite. The code reflects the real world problem domain, which indicates its a good design.
|
|
|
|
|
The reason for the member is that the state must be remembered across sessions and you can't serialize a static member.
But your point is well taken. I may be approaching this the wrong way. Perhaps having the "IsFavorite" as a property of the class, there should simply be a separate Apple reference that is updated to refer to the current favorite apple.
Thanks for your response!
|
|
|
|
|
In that case your database will need a Person type to represent you, and a Person.FavouriteApple member
|
|
|
|
|
Hi,
I recently came across this term 'Service Oriented Architecture'. I would like to know more about it. Any tutorial or link would help.
Regards,
ap.
|
|
|
|
|
|
Do a simple google search.
"Real programmers just throw a bunch of 1s and 0s at the computer to see what sticks" - Pete O'Hanlon
|
|
|
|
|
SOA is a interesting concept, yet it "technically" isn't anything new. Its really another type of distributed computing architecture environment.
Conceptually SOA was around since the 80's, but just recently (in past 4-5 years) the tools and technologies have become available to really use these concepts.
There are 2 types of SOAs:
True SOA
and
False SOA
Most people think that SOA is just a set of web services. That is "false SOA". It doesn't mean that is not SOA, it is SOA, but not utilizing all architecture concepts.
Designing a service-oriented-architecture requires designing the architecture from inception. During the design phase, one determines which components and features can become a web service. It is best to try to make as many features of the system a web service. Basically, creating another type of interface to the business logic.
Here are a few good books on this subject:
[^]
In summary:
SOA Is:
* An approach to information interoperability across diverse systems.
* Architecture style/concept
* Transformation to a business & IT
* The next Generation Architecture will constitute the third big era in the It industry's history.
* SOA uses interactive business components designed to be meanfulful, usable and useful across application or enterprise boundaries (integration + interoperability)
SOA is NOT:
* New
* A technology
* A Web service
* A specification
* A set of standards
* Code
* Just a hype or a buzz word
Good luck!
Arsen
|
|
|
|
|
I read your name as "Pay-Pal".
OK,. what country just started work for the day ? The ASP.NET forum is flooded with retarded questions. -Christian Graus
Best wishes to Rexx[^]
|
|
|
|
|
i try to make a crawler that crawls the web page
and retrieves the stock information from google (i.e)
in a google page contain stock infrmn,but i want
to fetch & display particular field infrmn.
but can't do it. so pl help me.
very urgent.
|
|
|
|
|
Have you and the guy below been busy doing something unsavoury so that you've missed your homework deadline?
|
|
|
|
|
Figure it out yourself.
"Real programmers just throw a bunch of 1s and 0s at the computer to see what sticks" - Pete O'Hanlon
|
|
|
|
|
Very easy... just by coding..
OK,. what country just started work for the day ? The ASP.NET forum is flooded with retarded questions. -Christian Graus
Best wishes to Rexx[^]
|
|
|
|
|
i try to make a crawler to fetch the webpage in php.
in a webpage,i want to display a particular field.
very urgent.help me.
sg
|
|
|
|
|
Figure it out yourself. This is a Microsoft/.NET/Visual Studio centric cite. You probably won't find much help with PHP here.
"Real programmers just throw a bunch of 1s and 0s at the computer to see what sticks" - Pete O'Hanlon
|
|
|
|
|
My xml file stores some data about different types of shapes and I want to load only those shapes which are being display, if a Next button is clicked it displays a shape if clicked again displays another shape. A shapecontrol may have picturebox control so how can I separate the shape control from its data. I know that i have to look into MVC pattern and have read about it but can't really figure out how to put together to get the result i want.
Basially i want to build like Ms power points. If power point we can add differnt kidns of objects and can view there raw data like height,width. Basially, i think controls are separted from data. That's what i want to
|
|
|
|
|
Obviously I can't post a complete solution, I've worked on the equivalent of MS PowerPoint and it was years of work. In general I would say to separate controls from data start by forgetting about the controls. Just think of the data, how to store it, retrieve it, access it and structure it. Then think about the controls as something you do with the data. When you do that you'll suddenly find you need data you didn't think of before. Add that to your original list and start over with getting your data structures right. Only when you switch to thinking about the controls and find all the data you need is readily available from your containers in a fast and safe manner then start on the controls for real.
The trick, if there is one, to a GUI heavy application is to do as little as possible in the GUI code and as much as possible in the data layer.
Nothing is exactly what it seems but everything with seems can be unpicked.
|
|
|
|
|
Hi everyone,
Can someone explain whether VS2008 will work with SQL Server 2005? I wasn't sure if VS2008 only works with SQL Server 2008.
Also, does anyone know if SQL Server 2008 Express offer Reporting Services? My client does not want to spend money on a SQL Server license, so I'd like to install SQL Server 08 express...but only if Reporting Services is part of it.
Thanks everyone, happy new yr
John
|
|
|
|
|
camby75 wrote: VS2008 will work with SQL Server 2005
Yes. It does.
Any particular reason why the jump to SQL Server 2008? If the client is okay with using 2005 and doesn't want to pay for 2008, don't do the jump up to 2008, then.
"Real programmers just throw a bunch of 1s and 0s at the computer to see what sticks" - Pete O'Hanlon
|
|
|
|
|
|
Even though i understand Architecture. still I can't explain clearly to my subordinates. I referred numerous web pages but they give a fuzzy explanation. Can any one help me ?
kannabiran
|
|
|
|
|
Kannan.P wrote: I referred numerous web pages but they give a fuzzy explanation
Because of it is a fuzzy concept .
Well, some exposure to OOP would help, anyway have a look at http://en.wikipedia.org/wiki/Software_architecture[^]
BTW what are your subordinates roles?
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
[my articles]
|
|
|
|
|
thanks for reply
my subordinates are programmer trainees. They just do code with my guidance.
kannabiran
|
|
|
|
|
If they haven't OOP exposure, maybe the time to fill the gap.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
[my articles]
|
|
|
|
|
Ah.... software architecture. Very good question. There really isn't a clear definition, although there is a informal standard (yeah, these 2 words don't go well together).
Software architecture can be defined as a design and blueprint of how the software components will work with each other, which objects are part of the software, how objects will interact with each other, and so on.
There can be a high-level architecture which may include:
Tier layers such as Database, application and UI.
And there can be a low-level architecture which may include:
Objects (classes) which are part of the software solution.
Most good software architects design the entity relationships and classes after designing a good and clear functional design.
A process in which I follow:
1) Design clear functional specifications which include detailed use cases of how each requirement will be implemented. (actually this is more of a job for a good technical analyst)
2) Design the component, state, process and class diagrams as detailed as possible.
Basically the end result should be a clear blueprint of how the software should be developed. Therefore a developer would just do the "implementation" and the design to have already been done by the software architect, hence the developer becomes a "robot" following the instructions of the architect.
I hope above helps.
Arsen
|
|
|
|