|
"there is nothing in my first reply that is not personable."
Yeah, "There is also this thing called Google that will find information for you."
Real personable.
|
|
|
|
|
daniel.byrne wrote: I have been thinking for a while that this is a bad design (should you get the data before
you create the instance of the class and pass this to the constructor?)
and if this is the case, wouldn't you just be moving the SQL into the UI or the calling method...
The whole point of a DAL is to abstract the "messy" part of retrieving data away from the UI which should neither care nor know how the data was retrieved or stored in the first place. That's not the job of the UI. The DAL is the place to manage the whole CRUD operations.
A common technique for data access is to provide a static Fill method that returns you an instantiated version of your model. This method could (for instance) use a DataRow to populate it's own information, so you'd have a controller class which retrieved a set of data (in the form of a DataReader) and then populate a collection of your model simply by "Filling" each item in the collection. BTW - there are some excellent code generators that automate the tedious process of getting the data out of the database and into your model.
|
|
|
|
|
We have a client driven app, each client has a number of delegates. We are designing a system to manage these and are currently trying to work out the objects.
A client has many delegates, and so should the client object contain a list of these delegates? If so that means that when an client is loaded from the database each of the delegate objects would also be loaded (is this too tightly coupled? There could be 100s of delegates associated with any given client)
The reason that the delegate need to be associated with the client is that, when the client is loaded the associated delegates need to be displayed with basic read only information (this information is unknown at the minute, but will include name, email, phone etc).
On the other hand if a delegate is loaded then, basic read only client information needs to be displayed on the delegate record. If we then referenced the client from the delegate, this would cause a loop of reference meaning that if you load a delegate or client all associated delegates would be loaded.
Any suggestions of a class design or design pattern? I feel that others must have done this?
|
|
|
|
|
Its hard to understand your question, because both the word "client" and "delegate" have lots of meanings. But I think I understand.
You have a master-detail (one-to-many) relationship between clients and delegates, and you want to have a client object with a property that contains a collection of delegate objects. Each delegate object will have a property reference back to a client object.
The simple solution is to use lazy-load properties. (Have the necessary properties, but only instantiate the actual objects the first time the properties are used). This prevents the "loop" scenario you mention.
If it is a small .NET app, then you could consider using Castle ActiveRecord, which will do this for you. (Or any OR-Mapper will also do it).
|
|
|
|
|
Many Thanks for your reply
I think you understand my problem!
using lazy-load properties would be ok, but..
I will have a screen showing client information (ie, linked to an instnace of a client class), on this screen i need to show basic information about each delegate at that client (say in a datagridview, and when they click on a delegate it opens a delegate screen), so i would end up loading each delegate anyway.
The only way i can think of doing this is to have a cut down delegate class that is used for displaying on the client screen and then if that client is selected to be loaded, create a full delegate instance.
I just worry that this could result in loads of different types of cut down delegate classes, if a delegate summary needs to be shown on any other forms
|
|
|
|
|
I have a module that accepts a datatable as a parameter.
It performs some operations on that datatable to return some useful information.
The problem is that my datatable provided to this module as parameter has to be in a specific format. i.e for start it needs to have 3 columns for it to be usable by my module.
So what and where and how will be the best way to specify the format required. so that any module , service, application or layer is only able to provide the datatable in correct format to this module.
hope i made my self clear.
thanks a lot
regards
joysnlove
|
|
|
|
|
Could you use a class structure instead of a datatable? That way you could specify what type you needed passing in.
eg
<br />
class Foo<br />
{<br />
int col1;<br />
int col2;<br />
string col3;<br />
<br />
<br />
}<br />
<br />
public bool myfunc(List<foo>,......)
modified on Wednesday, March 5, 2008 7:04 AM
|
|
|
|
|
joysnlove wrote: So what and where and how will be the best way to specify the format required. so that any module , service
The key thing here is service. If you look at exposing your method so that it can be used in an SOA scenario then you shouldn't use a DataTable or a DataSet. These are cumbersome objects that aren't natively recognised by other technologies (such as Java). You've already found typing issues with the dataset, so now you need to consider whether or not this really is the way forward.
|
|
|
|
|
Hi Guys,
I have a question about ImageList strategies. Originally i created an image list for each control, but this didn't expand well, especially when i wanted the same icon in multiple locations. I made a few image lists that covered particular sets of icons as well, this seems to work well, but again suffers from cross cutting issues.
My thoughts for a solution would be to put two image lists in an IOC container and have the application setup the display components based on this. Is this viable?
How do other people manage application wide image lists in their apps? Also, what mechanisms do people put in place for managing Image Keys when the images are dynamic?
Cheers
Tris
-------------------------------
Carrier Bags - 21st Century Tumbleweed.
modified on Monday, March 3, 2008 8:18 AM
|
|
|
|
|
Tristan Rhodes wrote: How do other people manage application wide image lists in their apps?
Static image lists. I tend not to work with dynamic image lists, so this strategy works well enough for me.
|
|
|
|
|
Hi Pete,
Is that static as in statically declared, or static as in unmodified? I get the impression you mean both.
The Icons are not fixed and may change. Quite a few of them are pulled out of a CE Database but i don't think there will be any threading issues as the app is (currently) single threaded.
-------------------------------
Carrier Bags - 21st Century Tumbleweed.
|
|
|
|
|
I mean both, but the principle should be the same for you.
|
|
|
|
|
I was hoping someone may be able to give me some feedback on my design principles. I have done alot of applications relating to databases etc in c# but this is my first try at a Client / Server application. I wannted to check some of the recommended ways of performing client / server actions.
The application is basically a front end for a database.
Basically my program will consist of a server application which will have a connection to a database. When a client wants to see records from the database they send a request to the server, which in turn connects to the database, retrives the records ands sends the record data back across the network stream and the client parses the records and displays them. Does this sound like a standard and solid principle?
Thanks in advance
|
|
|
|
|
Yup. It's part of the classic n-tier pattern. Generally you have a UI, a Business Layer and a Data Access Layer.
|
|
|
|
|
|
Yes, it is a standard n-tier setup like the others have mentioned. You have your UI, DAL, Business Logic, and database...
"Real programmers just throw a bunch of 1s and 0s at the computer to see what sticks" - Pete O'Hanlon
|
|
|
|
|
You are suggesting a forms application with 3 physical tiers (client, server, database)? That is appropriate if you want to scale to large amounts of clients, or if you have specific security concerns. Otherwise, you should be aware that it is more expensive to build than a simpler 2-tier arrangement.
(You should still logically split the application into layers).
|
|
|
|
|
Hi there,
This query is with respect to the isolation of object in a collection. And like to hear couple of approaches those are feasible in such scenario.
First, let me explain the problem which I am facing at this time. Our application has few rules (objects in concize) associated with few entities, those are editable for all currently active users (U1, U2). Assume that, we have 2 rules (R1, R2). Our requirement is no two users can edit, delete or modify a specific rule at same point of time.
Eg: If U1 update R1 then U2 has to wait till U1 release R1. If U1 update R2 then U2 have provision to update R1 since R1 is not locked by any user. I hope you are clear about the requirement.
Now, to ensure the above discussed functionality we implemented a method which uses Interlocked Class in threading namespace (VS.NET & C#). This approach in fact helps us while avoiding concurrent user access over a specific instance on a specific time using some flag value. But the problem is, it locks the entire rule collection (R1, R2) even thou there is no concurrent user. I presume, this is because of the way we model the class and is a collection (rule collection).
Eg: If I have N rules in rule collection, it doesn’t mean that I need to lock all N rule objects in the rule collection. But I only need to lock specific rule (subset of rule collection), those are currently used by some logged users. And ensure all other non affected rules are free from lock.
I did have a thought on the object level locking using .Net object locking mechanisms. But this is practically impossible to implement locking mechanism for each and every functionality.
FYI: It is small product which has 54 projects (30 services, test projects, script) in C#.NET. And the product has its 70% of functionalities in place. So a major rework in object level is not practical at this moment since it has to go through lot of review and regression process.
I hope you are clear with respect to the problem statement.
Can you explain me which method would be feasible in such scenario ?
How will i make sure only the object lock is available for the object which is currently i use and not other objects in the collection?
And how will I ensure object level isolation than locking an entire collection?
Do we have any proved patterns for this kind of problems?
Thanks in advance.
|
|
|
|
|
Hmmm. Not really sure about this one, but possibly the Observable pattern might help here. I'd really have to sit down with some paper to sketch it all out but basically you should be able to observe your rules (combine this with the Mediator pattern for best effect) and then notify the observer whenever a rule was being worked on or released from work.
|
|
|
|
|
Hi Pete, Implementing pattern at this stage seems to be bit difficult since most of the functionalities are in place. This specific lock functionality wasn't there and introduced later stages. I presume, it would be nice to introduce some kind of wrapper or attribute in type level which ensure the object level isolation. However, my sincere thanks for your time. Please do update me in case if you sketch something.
|
|
|
|
|
To be honest - it sounds like you are going to be looking at some amount of "rearchitecting" anyway. Sorry.
|
|
|
|
|
You might use Single Proxy between multiple Users and Rule collection.
Let Proxy decide which user can access which rule object.
Or let there be one Proxy object for each of your Rule object.Each user instead of accesing rule object directly can access Proxy of that rule object and in Proxy you can decide whether to allow user to access the rule object or not.
|
|
|
|
|
It sounds like you are asking how to implement pessimistic locking. There are very simple ways of doing that, although most people agree that it is quite a user-unfriendly thing to do (but sometimes you have no choice).
Basically, create a mutex on the server for the particular rule being edited, and deny edit access to that rule for other users until the mutex is released. The mutex can be anything - for example MS Office products create a file when you open a document for editing, and delete it when you are done.
|
|
|
|
|
Hi Guys,
I have a large, and quite complicated model that i origionaly defined using an object hierachy, but the solution has out grown that.
I require an in memory model that raises events when it is changed. These events can then be handled by any observing controls which in turn can update themselves.
As the model is large, and each control is only interested in one particular part of the Model, i would like to be able to pull out a section of the XML document and observe and apply changes to this block. Idealy i would like to be able to pull an XmlDocument from another XmlDocument and use that, but keeping it synchronised with the parent document.
I am limited to the XmlDocument object due to a .Net 2.0 limitation, although the XDocument (And associated LINQ model) would be perfect for what i am trying to achieve as each node raises change events that bubble up the object hierachy.
Are there any other solutions anyone else can think of?
Cheers
Tris
-------------------------------
Carrier Bags - 21st Century Tumbleweed.
|
|
|
|
|
Tristan Rhodes wrote: I am limited to the XmlDocument object due to a .Net 2.0 limitation
Care to explain that?
led mike
|
|
|
|