|
There is no cookie cutter rule or process or whatever that I can tell. The needs vary from project to project and even more so from company to company. If there is anything close to a cookie cutter map of project activities it would be this one.[^]
PIEBALDconsult wrote: My general rule is that design should be top-down
That doesn't really work with large systems having a relational database back end which is very common. Starting with the model and designing off of that for the different sub systems of the system is normally the way it works.
led mike
|
|
|
|
|
led mike wrote: Starting with the model and designing
That would seem to imply that you've already begun implementation -- creating the database.
Ideally, one of the last steps of design would be defining the database schema, then the first step of implementation would be creating the database and work up from there.
In many cases (including my current project), this can't really be achieved because the system accesses third-party databases, but there may still be the need to define views and such. This is true of any off-the-shelf product to which one must interface.
|
|
|
|
|
First I reiterate, my example is for a large business application. This means different project types could vary greatly from what I am saying.
PIEBALDconsult wrote: That would seem to imply that you've already begun implementation -- creating the database.
No, you start by modeling (design phase) the model. So..
PIEBALDconsult wrote: Ideally, one of the last steps of design would be defining the database schema,
Yes, I am saying from my experience one of the first things you do is model/design your model and part or all of that can end up being implemented in one or more database schemas.
led mike
|
|
|
|
|
PIEBALDconsult wrote: "My general rule is that design should be top-down, but implementation should be bottom-up."
I've ran into something similar in my own experience--I've come up with some pretty good solutions when the design specifications were done from the top down, and when the implementation was done from the bottom-up to meet those specifications. Generally, I don't introduce any patterns or any preconceived architecture until I can get the simplest prototype up and running (using standard structural programming techniques) and then refactor it and generalize it at various points until a design emerges.
It works for me in most cases, but the trade off in this case is that this approach assumes that you can pretty much refactor your way out of anything--and this might not be the best way to do things if you have a team that doesn't have much experience in refactoring. Without refactoring, the approach I mentioned above will quickly descend into a "Code & Fix" scenario, so overall, I would recommend it if you can guarantee that you can keep your code base relatively clean..
|
|
|
|
|
I don't know the meaning of "refactoring".
No, seriously, I have to find a definition of "refactoring".
Chances are, I do it, but I just don't know it.
|
|
|
|
|
|
Yes, I've come to the same conclusion over the years. In fact I've come to believe in a form a form of 'undirected' development sometimes known as z-programming. The concept is that you keep a proportion of your team busy all the time coding from the bottom up without any particular spec or goal, simply taking the existing set of low level facilities, be that APIs or COM objects or graphics primitives and combining in ways that seem like they might be useful, creating data structures and containers and algorithms that conform to best practices but don't have any particular application in mind. You do your design from the top down and create at least one empty shell style prototype which consists mostly of the UI of the product and any product specific novelties. Application development then becomes a process of filling in the functionality using the generic tools you've developed. One of the key things being no-one is allowed to reinvent for a specific app anything that's already available in the codebase for generic usage. You soon find if there's an area your z-programmers have been ignoring and they can be directed to concentrate on it. This does a number of things, it keeps programmer busy, it makes them write truly generic code, it allows them to concentrate on what they're good at and to be creative, it ensures that re-use ( a goal but seldom a reality ) actually happens.
This is all great for desktop application but if and how it might be applied to web based applications is still amystery to me
"The secret of happiness is freedom, and the secret of freedom, courage."
Thucydides (B.C. 460-400)
|
|
|
|
|
Matthew Faithfull wrote: z-programming
Huh, I hadn't heard of that. I do some, but I didn't know it was a "good thing".
|
|
|
|
|
The link is now dead but if I get the drift of what's being discussed I have to say design should *ALWAYS* be from the top down.
(One point I need to make that I come from the background of a small company that designs, builds and sells software globally, we don't have teams to do this or that, there are very few of us and we each do everything, no one is a specialist "designer" or strictly a "coder".)
Designs that are bottom up are noticeable (for all the wrong reasons) in an instant because they focus on how the computer works, not how the user thinks. A user thinks about tasks they want to accomplish, a programmer thinks about how the computer will process information.
If the programmer is let loose to do the design and they are a rookie with little exposure to real world feedback on their design they will often and naturally think about the data first going bottom up, it seems natural to start at the bottom (the stuff they know best) and work their way up to the real world application (probably the stuff they are the least comfortable with).
After some real world seasoning and feedback (and most important of all time on the support queue) hopefully they will start to think about the tasks the user needs to accomplish in the fewest steps and simplest method to get the user there with no thought at all to how it will be implemented during design, mock up a UI because it helps even on paper, run it past non programmers etc.
Only then start thinking about implementation with the goal of satisfying the task oriented design.
As far as implementing it, I don't know if it matters that much as long as the goals are satisfied.
I prefer a "literary" implementation, neither top down or bottom up. Working on a huge project with a small team can be overwhelming, it's easier to work on rough details and refine later.
I plot out rough outlines on paper first, like chapter headings, code those items first so I have everything covered but not fully implemented, then go in and refine each one, perhaps adding "section headings" for each "chapter", filling in the bits between the chapters. In this way you always have a mental feeling that you have the whole project covered and the rest is just refinements. It becomes far less overwhelming and seems more like bite sized chunks.
For example let's say I have a large project with hundreds of business objects, I would create all the objects first without any real code implementation, look it over think about the design, make changes as necessary, try to get it as quickly as possible to the point where I can roughly make a real interface to try out the workflow, then go in and fill in all the CRUD methods (create, read, update, delete), then go back in and add business rules or further refinements.
Of course this is often based on a data access layer that I've already developed some time ago so I guess in a sense if you are starting from nothing then you do need to do a little bottom up first but you can't simply go in a straight line from bottom to top. (Unless it's been planned far *too* much and too detailed to begin with. Always a bad mistake to make, some looseness is required.)
"The pursuit of excellence is less profitable than the pursuit of bigness, but it can be more satisfying."
- David Ogilvy
|
|
|
|
|
I tend to do modelling and implemention top-down.
Okay, I tend to implementation a bit randomly, depending on how much research is necessary.
Though, in general I start by designing the forms, then continue with the functionality necessary to fill them and finally get the background stuff the user doesn't notice.
When I write code I always keep in mind, what it is supposed to accomplish, not the details at the bottom but ultimately the results on top.
John C wrote: For example let's say I have a large project with hundreds of business objects, I would create all the objects first without any real code implementation, look it over think about the design, make changes as necessary, try to get it as quickly as possible to the point where I can roughly make a real interface to try out the workflow, then go in and fill in all the CRUD methods (create, read, update, delete), then go back in and add business rules or further refinements.
I tend to do the same, in order to set the basic structure for the application.
|
|
|
|
|
I am looking for ideas for avoiding contamination of proprietary code by a GPL application. I need to be able to use the GPL application without opening up my code to GPL. I would like to get feedback from folks who may have encounter this issue and considered using some RPC mechanism to establish client/server type architecture potentially using shared memory for data passing. This is for a multimedia type application. Thanks. Fred
|
|
|
|
|
If I understand GPL correctly, you are toast either way.
If you derive, use, intaract with a GPL product you have to go GPL.
The only way I know of to bypass it is to ask the developers if you may buy the right to use it w/o GPL.
|
|
|
|
|
Simple answer - find an alternative component that doesn't use GPL. Maybe find one that uses LGPL or is closed source. You can't arbitrarily decide to ignore the GPL license - the author's have decided to license the component that way, and if you use it you agree to abide by the decision.
|
|
|
|
|
Fred Garvin wrote: avoiding contamination of proprietary code by a GPL application
This sounds like a twist in reality, are you an IT manager?
Anyway, here are some possibilities. First, there speaks nothing against using GPL-ed applications, e.g. using the Apache web server does not require your web applications or content to fall under the same license. Secondly, consider contacting the author (copyright holder) and ask if you may purchase the product under an alternative license, e.g. some software is dual-licensed to fit proprietary needs. Finally, consider going open source yourself and possibly benefit from community/developer feedback.
Hope it helps.
/M
|
|
|
|
|
That is in part because the Apache web server is licensed under the Apache license - which is not very much like the GPL at all...
|
|
|
|
|
I've been using the following pattern with transactions for some time now, without problems.
try
{
}
catch ( System.Exception err )
{
}
I have been operating under the assumption that if Commit or Rollback is called for a non-existent transaction, then throwing an exception is the right thing to do. The Commit and Rollback in question are my methods that check for null and throw InvalidOperationException rather than NullReferenceException.
But recently I've run into some problems. For some reason (which I still need to investigate further, but I have an idea) the Commit fails because the transaction doesn't exist, which means the Rollback will also fail. Having an exception thrown through the catch is, of course, nasty.
I could change the methods to raise an event instead of throwing.
I could filter the exception to log but not rollback on certain exceptions (like InvalidOperationException).
Has anyone else had to deal with this situation?
Does anyone have a better pattern for this?
|
|
|
|
|
Well, the transaction can easily be checked by looking at the transaction on your command, e.g
if (myCommand.Transaction != null)
{
myCommand.Transaction.Commit();
}
|
|
|
|
|
Yes, and I do, but if it is null, I throw InvalidOperationException, because I feel that the caller should know about it.
I don't want to continue as if everything was okey-dokey.
I check the same thing in my Rollback method as well, which is causing the trouble.
|
|
|
|
|
Where can find these (Skipjack and RC5) ciphers latest materials such as international paper, book or reference. I saw some of them but they published around 10 years ago. That is too old to use. Is this any new materials for them? Help to find it? Thank you
|
|
|
|
|
I've implemented Skipjack recently on a small micro as well as in VB. I don't have the code handy, and since it belongs to my client I really couldn't share it, but a Google search for Skipjack encryption will turn up some good stuff within a page or two (if you don't mention encryption, you'll get information about boats and other stuff).
I haven't seen anything to suggest that Skipjack has been "broken", though cryptosystems that are very close to Skipjack have been. I would not recommend tampering with the internal workings of Skipjack, since such tampering is apt to make it significantly weaker. If interoperability with existing Skipjack implementations is not required, however, increasing the number of rounds to 48 (from 32) might not be a bad idea. Note that if the number of rounds is reduced at all, cryptanalytic attacks become easier than brute force. By my understanding, increasing the number of rounds to 48 would improve security (an attack on a 31-round version of Skipjack has been discovered; using only 32 rounds would seem to be cutting things rather 'close').
|
|
|
|
|
I had no idea this was here.
I'll have to start lurking here now, this stuff is right up my alley.
Cheers all!
"The pursuit of excellence is less profitable than the pursuit of bigness, but it can be more satisfying."
- David Ogilvy
|
|
|
|
|
It's fairly new. It's only been here about a year now. You need to get out of the lounge more.
|
|
|
|
|
Yeah I do.
"The pursuit of excellence is less profitable than the pursuit of bigness, but it can be more satisfying."
- David Ogilvy
|
|
|
|
|
Hi Everyone,
I have gotten myself into a project who's design is far beyond my abilities. I'm a rookie when it comes to good object oriented design. I understand the basics, but am not familiar with all of the patterns and such. I am the only programmer at my company and don't have anyone to bounce ideas off, so I'm posting here hoping for some coaching and guidance on a good class diagram.
That being said, the project is a reporting system that allows spreadsheet entry via a website. The website is currently operational and used for other purposes. We are currently using FarPoint Spread for other spreadsheet data entry. We have a folder on our web server that is called forms and holds each report spreadsheet.
I have identified what I think are the main objects.
What I don't know how to handle is the validation and processing. I assume I would create a validation interface and a form processing interface, but I don't know how to lay that out.
I've typed up a summary of this project:
Abstract:
Professional Hospitality, a hotel management company, has each hotel report back to the home office on a monthly basis. The current arrangement requires the manager to type up all of the information on spreadsheets. The spreadsheets are then printed and mailed via postal to the Home Office. The Home Office, then opens and sorts the mail and types in the data from the spreadsheets. The new spreadsheets are then printed and delivered to the appropriate regional managers around the home office. After the regional managers review the information, the printed spreadsheets are then sorted and filed in file cabinets.
Problems:
The current process involves large amounts of manual labor, postage, printing costs, filing costs, and data entry costs. The goal of this project is to reduce or eliminate these cost burdens and therefore increase company profitability. Professional Hospitality would like to be able to create other reports to be submitted on differing intervals. Current examples are a Sales month-end, bi-weekly rate reporting, or annual reports.
Requirements:
• Web based data entry that is similar to Excel spreadsheets
• Templates (master spreadsheets) used to format each form and also ensure consistent entry
• Enter data on multiple templates for each reporting period
• Submit the entire group of spreadsheets when the period has lapsed
• Ability to create multiple report periods. AKA, a monthly report, bi-weekly report etc.
• Ability to setup validation rules in spreadsheet cells. Validations would be enforced when trying to submit the report.
• Ability to setup automatic value transfer rules from one reporting period to another. In other words ability to copy cell E10 from the last reporting period to the current.
Definitions:
Periods: A collection of “Periods”.
Period: Required reports to be submitted at a specified interval. A period contains a collection of period reports. (Month-End, Bi-Weekly, Sales Reports, Rate Reports etc).
Period Reports: A collection of reports for the specified period. If this were a month-end period, then you would see January 2008, Feb 2008, Mar 2008 month-ends.
Report: A collection of forms to be submitted for the reporting period. An example of a report would be January 2008 Month-End.
Form: Individual report-specific instance of a template fill with the periods information
Template: Excel spreadsheet used to standardize data entry
|
|
|
|
|
i am sure it's your home work and you are just making up about the company and stuff .
innit
|
|
|
|
|