Need advice with architecting a 1.1 to 4.0 rewrite

I am rewriting Visual Basic code from 1.1(VS2003)  to 4.0(vs2010) framework.
I have a situation where a single dll is referenced by 12 different slns.
Its kind of "all over the board" on the dll functions that are used.

What has happenned is that there was a tendancy for programmers to just make code updates for the specific sln instead of updating the shared dll and implementing it for all 12 slns.  

so for the rewrite, I would like this to work such that is isn't so difficult to apply changes to the shared dll. (like if someone had to change the shared dll, but it only really affects 1 sln....how could that tweek be made such that all 12 slns would need to bring in the new dll as well).

I am kind of weak in the architecture arena, so I was looking for someone to give me advice on this.  I hope this makes sense!  Thank you!
ToolTimeGangAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Bob LearnedCommented:
That sounds like a scenario that is solved by a good source control like Team Foundation Server, with branching and merging, so that you can move updates upstream and downstream between the solutions.
0
ToolTimeGangAuthor Commented:
Hmmm...we use TFS, but I was wondering more about something like WCF or a web service?
0
Bob LearnedCommented:
"I was wondering more about something like WCF or a web service?"

As an outsider, I would need to know more about your requirements to suggest the better course of action.  I am not sure how a web service would fit into your needs.  Can you give me a little more detail about your "problem space"?
0
Amazon Web Services

Are you thinking about creating an Amazon Web Services account for your business? Not sure where to start? In this course you’ll get an overview of the history of AWS and take a tour of their user interface.

ToolTimeGangAuthor Commented:
The shared dll has approximately 180 functions that are shared amongst 12 different solutions.  Developers have gotten into the habit of just implementing a change to the dll only for the solution that needs it.  So they change it for that solution and do not implement it to the others.

To prevent this from happenning in the future, I think I need to break up the shared dll so they are not as apt to do that.  (perhaps that is my solution?  That is, break up the giant dll into multiple dlls)

I think they are trying to keep all the db calls in a central location.  But I don't think it makes sense to do that if its such a painful process to have to implement any updates to the dll across 12 solutions.

As a result, there are numerous versions of the dll being used.

So I was trying to think of a better way to implement "shared code" besides using the dll concept.

Does that help?
0
Bob LearnedCommented:
The concept of having a single solution, with decentralized code has its attraction.  It is difficult to debug and maintain code if you have a single global shared library, since it would make your code base fragile, and would break dependencies on a regular basis.

It is nice, though, to be able to still share code between solutions.  We use Team Foundation Server to create a link between different solutions.  The hierarchy is something like this:

Common Shared Source
     Main
     Development
     Release
Common Shared Binaries
Solution1
    Main
         Shared Source
         Shared Binaries
         Source
               Solution1
                    Project1
                    Project2
                    UnitTests
    Development
         Sandbox
              Shared Source
              Shared Binaries
              Source
               Solution1
                    Project1
                    Project2
                    Project3
                    UnitTests
    Release
Solution 2
    Main
         Shared Source
         Shared Binaries
         Source
               Solution2
                    Project3
                    Project4
                    UnitTests
    Development
    Release
          2.1.0.0

With this structure, you can branch easily from Main to a Development branch.  This creates a link between the two, so that you can forward and reverse migrate changes between the two solutions.  

There would still be a separation between the different solutions with regards to the shared code.  You need to specifically merge changes to another solution.
0
ToolTimeGangAuthor Commented:
This is a possible solution, but it also invites the possibility of having multiple versions of the source floating around out there.

I am leaning towards one of the following 2 solutions:
1: keep using the shared dll
2. use a web service
A web service would allow functions to be updated and deployed for all slns.  (you wouldn't have the option to not use it as you would with a dll)
0
Bob LearnedCommented:
A web service may be a good solution, but it is not a perfect solution.  If you need to think about performance, then a web service can be a choke point.  You always have to think about the service contract, and how making centralized changes can break a working application.

If you are focused on a web service for this, then think about WCF with net.tcp binding.

Configuring WCF Service with netTcpBinding
http://rohitguptablog.wordpress.com/2011/06/16/configuring-wcf-service-with-nettcpbinding/
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
ToolTimeGangAuthor Commented:
Excellent point on the web service.
And WCF Service with netTcpBinding is certainly another option to consider.  I was not aware of that.

Thank you for all your help on this.  I don't know the decision yet because I need to present the options to the team.  

Thank you so much for your time.  This was very helpful for me!
0
Bob LearnedCommented:
WCF Services - Choosing the appropriate WCF binding
http://www.codeproject.com/Articles/431291/WCF-Services-Choosing-the-appropriate-WCF-binding

"NetTcpBinding supports reliability, transactions and security. It also supports TCP protocol and binary as encoding method. We can say that it’s the most optimized or fastest binding because both client and service are on the same WCF technology."
0
ToolTimeGangAuthor Commented:
thank you!
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Visual Basic.NET

From novice to tech pro — start learning today.