|
Hi,
I've been surfing around for articles on best approaches to library architecture for multiple applications used by multiple developers and so far have come up with very little so I thought I may as well just ask some questions.
Our company has been developing solutions for a number of years using Borlands Delphi and a FAT Client-style architecture where most of the code gets compiled and linked into one executable per application (There were historical reasons behind this style that I won't go into). So structuring our code library has been fairly easy, using a Visual Source Safe as our primary source control, we simply share the code into the application folder, then we reference all the code as relative path.
However, since starting development in C# (and the dotNet Framework) its obvious that this approach was not going to cut it.
So then development started and progressed down the path of separate, specific assemblies for each specific algorithm/datastore/UI etc. Now I/We have the problem of structuring these assemblies/libraries so that multiple applications reference them both in development and deployment. Deployment isn't much of a worry as we are placing all the assemblies in a folder on the target platform but our major problem is referencing these assemblies during development. Ie in Solution/Project files, VSS and also in our Build System (FinalBuilder)
I'll give you an example.
LibraryA and LibraryB are two assemblies that contain algorithms for two separate/different situations. They have there own Project and Solution files, their own specific tests, are in their own separate folders with our source control and are built separately within our Build System.
Now Application1 needs to use both LibraryA and LibraryB. Application1 is laid out in the same way that both libraries are (VSS, BuildSystem etc) but there needs to be a reference to both assemblies within the Project file. And it needs to be available at Design time (within VS) and during automated Build time (FinalBuilder).
I know about the GAC and as a company we have decided against using it.
Our preliminary idea is to use a Global assembly area of our own, that each developer has (using an environment variable) and it contains all the assemblies within our library, so all references are directed at this location. So our Build System just needs to ensure that these assemblies are available when building each application. Other ideas that have been discussed was to setup our Build System to build all dependent projects before the main project and reference each dependent project within the main projects Solution file with the references to the dependent projects build locations.
So my question(s) is/are:
What are some of the approaches that other organisations/people use to reference assemblies at design/development time across multiple applications and multiple developers?
Hopefully I have explained our problem sufficiently and I'm betting that this is a issue in more than one place of business, so I'm sure the answer(s) is out there. Please share your thoughts and ideas.
Thanks
Brett Morris
-- modified at 21:50 Tuesday 26th June, 2007
|
|
|
|
|
Why don't each of you just assemble your own custom solutions of the pieces you need and allow the build machine to do the same?
This statement was never false.
|
|
|
|
|
What is the intent of calling a virtual function in thebase class from the its overwridden version in derived class? Does it in any way relate to the template design pattern. How can the same be achieved by agrreggation.
|
|
|
|
|
You would normally do it if you needed to perform the original processing provided by the base method in your derived method. For instance, suppose you have the following really trivial classes
public class ClassA
{
public virtual void DoThis()
{
Console.WriteLine("Hello");
}
}
public class ClassB : ClassA
{
public override void DoThis()
{
base.DoThis();
Console.WriteLine("World");
}
} If you do the following:
ClassB myClass = new ClassB();
myClass.DoThis(); Hello will be written to the console, and then World on a new line.
|
|
|
|
|
Actually, cant agree with this. The purpose of virtual function is not to call the base function. You could do that anyways even without virtual specified.
The actual usage of virtual comes into play for polymorphism. In the above example, if you were instantiating the object via :
ClassA myClass = new ClassB();
myclass.DoThis();
Its the ClassB.DoThis which is going to get called. Effectively, letting you choose the functionality at runtime.
Please correct me if I am wrong.
|
|
|
|
|
If you read the OP, you will see that he asks:
"What is the intent of calling a virtual function in thebase class from the its overwridden version in derived class?"
The implementation that I show answers this question - granted I don't go into the practicalities of design and polymorphism, but I am only interested here in showing why you call the base method.
|
|
|
|
|
hey there
i use transparent canvas on my pics ,in order to use a fine background template i made
in mozilla everything is great (again) but in IE(6) i get a gray img bgrnd ,that covers up the page backround
i use fireworks 8 for image editing
Is there a body{} or html{} css rule that will solve this problem
thanks
(i hope i'm in the right message board for this)
P.
ninja coding
|
|
|
|
|
You're not on the right forum. This should be in the web development forum.
However, we're here now. Are you by any chance using a transparent PNG? If so, you should know that IE 6 has real problems with them.
|
|
|
|
|
All,
I am a junior developer at a company and I have been given a rather unusual task. We have 2 development environments, one is C# .Net 2.0 and the other is called Omnis Studio. For those of you not familiar with Omnis Studio just imagine Visual Studio on acid.
Now all of my companies legacy systems are written in omnis studio and we want to get away from that development tool. But the system that is written is a rather monolithic monstrosity that cannot be easily broken out.
We have identified a system that we want to replace within it and are about to use a .Net library with a COM facade so that omnis studio can work with it. The plan being that if we slowly replace enough then it will be more .Net than omnis and we can wholesale change it.
This is where the problem comes in. My manager wants me to write a GUI application which we then embed in an omnis form. Now I think this idea is mental and that it will end horribly. What I would like are the thoughts and oppinions of this board in regards to cross platform form embedding. What I want is to write a simple data object with a COM facade and slowly replace the middle of the system so that Omnis will merely be a GUI interface which at an appropriate time we can peel off and replace with a .Net gui. I feel that if we get into the form embedding business that we will end up with frankenstein's monster patchwork quilt of a system where when we finally decide to peel away omnis we will have a set of independant GUI's that will be as bad as what they replaced.
If people could give their thoughts on this matter I would be greatfull and any links to resources that would be helpful. To clarify my position it would be like embedding a delphi form in .Net, or a python form in ruby. I don't really see the need as the origional system already has forms and buttons and should only interface with a middle tier data objects.
Thanks in advance for any help.
|
|
|
|
|
I feel that you are more on the right lines with regards to moving things. For a start, you will have a much better chance of successfully unit testing the back end system. If you know what it does, and how it does it you would probably use Test Driven Development to make the change to the system. This means that you will be in much more control over verifying that your system behaves the way you want in a controlled fashion.
|
|
|
|
|
If the plan was to develop a GUI application, why not use the application directly?
Anyways, the immediate options I see:
a.) Convince your manager with your idea, since you sound right.
b.) Change your manager.
|
|
|
|
|
Hello All at Codeproject,
Greetings!!!
I am designing a module which primarily acts as a bridge between the Hardware/firmware C/C++ code and .Net webservices.
To elobrate It calls the C/C++ code functions to interact the H/W and calls XI SAP webservice interface to validate the details etc.
The webservices are exposed via WSDL files.
I have to comeup with the design of the firmware/ H/W APIs and bridge them to webservices.
I request your wise guidance to come up with a system which could also act as a C/C++ code module and .Net module.
Here is what I already think of:
1. Group firmware code and webservices calling code in to single VC++.Net process.
2. Group firmware code in to C++ ATL COM Component and webservice part in to VC#.Net and let both interact with CCW and RCWs.
3. Group firmware code and webservices calling code in to single classic VC6 process for simplicity.
I am doubtfull if VC6 can call webservices Here!!!
I shall be looking forward for your openions very eagerly.
Thanks and very best regards.
Amarjeet.
|
|
|
|
|
I recently joined a company that seem to make extensive use of iBatis[^]. Their (the company I joined) products have been written in Delphi & have used different databases for their apps over the years (mostly Interbase and Firebird as far as I can tell).
Part of my function here is to rebuild all their products in .NET using SQL Server 2005 as a backend. The previous senior dev (who left before I got here) seems to have had tremendous faith in iBatis but I have had no experience with it whatsoever. I've done some research & read up on it but I'd like to hear from people on the frontline who've actually used it - what do you think of it?
|
|
|
|
|
Are you working with it? Sounds interesting.
"Real programmers just throw a bunch of 1s and 0s at the computer to see what sticks" - Pete O'Hanlon
|
|
|
|
|
I've actually since left the company & didn't end up using it much after all. Pity tho, as it does seem to have potential. The basic "gist" of it (for want of a better word) is that it'd allow you independence from any particular RDBMS (which is particularly useful to small ISV's I'd say). That's the upside - the downside is that it does require a significant time investment to get a decent, reusable DAL API that you could plug in to the various incarnations of one's project.
The reason I didn't get to use it as much as I would have liked to is that the project I was working on was way behind schedule and my team wasn't afforded enough time to get it (an iBatis DAL) up & running. Besides that, the company decided that they would be working exclusively with SQL Server in the future, and as such, the abstraction provided by using iBatis didn't provide any significant benefits.
I ended up building a lightweight DAL that could be applied to pretty much any SQL Server database with only a little extra code involved (setting up SQL parameters for specific objects). Other than that it does the job pretty well. Good article fodder were I eloquent enough
But fortunately we have the nanny-state politicians who can step in to protect us poor stupid consumers, most of whom would not know a JVM from a frozen chicken. Bruce Pierson Because programming is an art, not a science. Marc Clifton
|
|
|
|
|
I have a simple application that searches on terms like surname or phone number, and then displays results in a grid. Double clicking a row then opens a details edit form for the owner of the phone number. Editing owner details is easy, but I would like some suggestions on editing phone numbers for the owner. If it's a person, there probably is only one phone number, so I have a phone number field on the owner details form. It is populated from the first item in the PhoneNumbers collection for the owner.
Now, when a company is the owner of a whole range of numbers, I need to open a separate editor. I would like some commentary on my initial design choice: I have two listboxes, and above them two textboxes. I have three buttons, Add, which adds the number in textbox1 to the left listbox, which shows all numbers for the owner. AddRange, which adds all the numbers in the range from textbox1 to textbox2, and Remove, which removes the selected number from the list on the left to the list on the right. When the user clicks OK, changes are saved - new numbers are added, changed numbers are updated, and removed numbers are deleted.
How else could I do this?
|
|
|
|
|
Brady Kelly wrote: If it's a person, there probably is only one phone number
ummmm I have 3
|
|
|
|
|
Of course, I have three as well. One is work, and two cell, oh, plus one fax.
I meant that, in the scenario of a person with one number, the first number in their numbers collection is exposed for editing without having to open the numbers collection editor I am trying to design. The first number in the collection will always appear in the single Phone Number field on the Person Details form.
|
|
|
|
|
I don't care much for the "Details Form" design. I prefer the Visual Studio editing design where you have methods of navigating your domain model, like trees and lists etc., and once you selected the item of interest you use the PropertyGrid for editing the values. This allows you to present a UI where the user can see everything at the same time, no popping up new windows (forms) on top of the previous one. This style of UI gives the user the impression that they are in control rather than the application "controlling the user".
|
|
|
|
|
That's way too involved for this little app. It's a 12 hour quote, and confined to only the functions described.
|
|
|
|
|
My mistake. I didn't realize it was a toy program.
|
|
|
|
|
Yes, the editing is essentially a toy. The app is used by a tracing agency primarily to do searches, on name, adress, or phone number, based on a database provided by a third party. Editing the records hardly makes sense, but it was a requirement that I still want to deliver and get paid for.
|
|
|
|
|
How can I use Runge Kutta algorithm to programme a fractal?
Noha.Y
|
|
|
|
|
Are you still working on this?
"Real programmers just throw a bunch of 1s and 0s at the computer to see what sticks" - Pete O'Hanlon
|
|
|
|
|
Hi, Can you help me to get a Neuronic Computation simple program?
Noha.Y
|
|
|
|