Streamline and Standardiaze Team Development Work in ASP.NET.

Streamline and Standardiaze Team Development Work in ASP.NET.

Old forum URL: forums.lhotka.net/forums/t/4581.aspx


tarekahf posted on Friday, March 28, 2008

Dear All,

I truly appreciate your help and feedback. I will give you below a background about our situation, the results of the research I made, and then I will mention my requirements.

I actually was refered to CSLA.NET from www.asp.net forums, and I need to know if CSLA.NET will be of value to us, with reagards to our requirements.

Background:

1. I work in a company in IT Dept., and we are a team of 3-4 developers, with different levels of skills in ASP.NET, and with excellent development skills each in his area of specialty (Lotus Notes, Java ...etc). We have highly skilled developers in ASP.NET. We are using VS2005/SQL Server for the Web Application Development, and VSS for Source Control, in addition to other tools/platforms.

2. The objective of our team is to develop Applications for the End Users to increase their productivity (Using Web Based Applications).  The back-end systems are in UNIX/Adabas. We are using CONNX SQL Gateway for Data Access from the Web Apps to Adabas. SAP Portals will be deployed in a couple of months, and we are migrating from UNIX/Adabas to SAP in a couple of years.

3. The applications we are developing may be targeted for ALL Staff, or for certain department/section in the company The total number of the Staff is 1000 (aprox) and the avareage number of staff in each dept is 30.

4. Our biggest problem in developing Good Looking Professional Applications, and we have not yet upgraded to VS2008, so I guess AJAX for .NET 3.x, Silverlight and Expression are not an option for the near futures, but surely, we will have to upgrade sooner or later, which will take some time because we have to arrange for training, licensing, budget ...etc.

5. The time frame to build the required applications is usually tight (and always the users want the application to finish yesterday). The average period to launch an application after completing a development cycle is 2-3 months. The application goes under continuous improvements over 6-10 months, and in some cases, it will span over a couple of years.

Below is some info I found based on my research, on how to build good looking web applications:

1. Using CMS Tools like DotNetNuke from:
http://www.dotnetnuke.com/. and.or Umbraco from: http://www.umbraco.org/ , where such tools are very good in building attractive UI, but usually, as per my personal opinion, I do not recommend using such tools for cases like ours, because of the following:

  1.1. They do a lot of things for you that you don't need, which causes BLOATED Output and possible performance issues.
  1,2,  They may impose some annoying limitations,  which may force you to perform some unusual tricks to make them happen, if that is possible in the first place. So the time you saved to build the UI, has been wasted in finding solutions for tricks.
  1.3. They may require certain configuration which is not available, or will cause unwanted results.
  1.4. They require a special learning curve. Each tool has its own technique. I prefer to spend my time learning the original APS.NET infrastructure instead.
  1.5.
They duplicate the functionality provided by SAP Portal, and the effort needed to implement and learn how to use this tool will be wasted.
  1.6.
For DNN, it generates a Huge number of objects for SQL Server Database and Web Parts/Files/Folders under IIS, ie, it is a Bloated Engine: Each time you create a web site for an application, it will create a large number of objects which you have no control over, and if you mix different web application in the same web site, it will confusing.

---> I am interested in your feedback about such CMS tools please, and how it compares to CSLA.NET ?

2. There is also many other ASP.NET Starter Kits. or CSK and and the like, some of which seems less complex than DNN and umbraco. I need your input on such tools and how they are different from CSLA.NET. The related link:

http://www.asp.net/community/projects/

3, I also found the Enterprise Library from: http://msdn2.microsoft.com/en-us/library/aa480453.aspx
. It looks very promising. But, it has no reference to Web Templates, Master Pages, Style sheets, Themes, Site Navigation, Dynamic Menus and User Interface in Greneral.

4. I have done some research, and found the following links to which have ready Web Templates for Master Page, Themes, Style Sheets, Menus ...etc...:

http://msdn2.microsoft.com/en-us/asp.net/aa336603.aspx
http://msdn2.microsoft.com/en-us/asp.net/aa336602.aspx
http://www.ex-designz.net/template/default.asp
http://www.beansoftware.com/ASP.NET-Tutorials/Globalisation-Multilingual-CultureInfo.aspx 
http://www.asp.net/community/control-gallery/browse.aspx?category=22

We have found a lot of web templates and Master Pages Samples, and Menu and Navigation Templates... but, the problem is that they are Static, we need to do some work to replace the static menus with Menu and Navigation Controls of ASP.NET. Do you have any feedback on this issue ? Any alternative way ?

5. For Authentication and Authorization, I was looking for a way to use Windows Authentication, and User Defined Role Based Authorization (using GenericPrincipal instead of Windows NT Groups), and I found this link which a sample code that will help me achieve my requirement:

http://weblogs.asp.net/dneimke/archive/2003/09/29/29499.aspx

And, I will use the info from this link:

http://msdn2.microsoft.com/en-us/library/tksy7hd7.aspx

to build the required authorization module.

6. I also found Ajax Control Toolkit which looks very promissing for UI. How does it compare to CSLA.NET ?


Our Requirements:

1. We are in bad need for a method, technique, easy to use tool, or what ever you want to call it, we are looking for a way to standardize and streamline the development of Web Applications among the Team Members. The objective is to reuse the work completed by others and have consistent way of developing application in all aspects, so that it will be easy to hand-over the work from one team member to another

2. Rich User Interface. I do not mean FLASH, Silverlite and the like, I mean good looking and professional web application (look and feel and UI). To be more specific, this covers: Master Pages, Themes, Style sheets, Site Navigations, Dynamic Menus (with User Roles), ... etc. and it does not have to be fully automated. As you know, it is really not easy to work with CSS, you must agree with me, don't you ? While CSS Editor/Builder makes it a little bit easier, you still need to have the Artistic Skills to be able to imagine what colors you need.

3. 
Standardize Authentication and Authorization across all applications. We are mainly using Windows Authentication, and for Authorization, I want to use user-defined Roles and assigning roles to users, and control menu access and system functions using roles.

4. Complete the development in relatively a short period: Rapid Application Development,

Your feedback, comments and recommendations will be greatly appreciated.

Regards ...

Tarek.

webjedi replied on Friday, March 28, 2008

From the sounds of it you are really looking for a UI framework and not an 'application framework' like CSLA.  CSLA will help you build the plumbing of the application such that it will be scalable and flexible, but in and of itself it will not help you make your application more professional looking.

For that you should checkout the controls companies like Telerik and Infragistics...I know many of Teleriks controls are still .Net 2.0 but look and behave remarkably 3.5ish.

Hope that helps.

Ryan

RikGarner replied on Friday, March 28, 2008

We have an application that combines several "chunks of framework" from different sources into one coherent whole, of which CSLA was one.

The Enterprise Libraries provide a good set of "plumbing" code upon which you can build a CSLA based set of business objects (we used the data access app, cache and crypto blocks).

To build a UI on top of all that we used the Smart Client software factory which provides a framework for creating desktop apps. There is a web client equivalent which, combined with AJAX, should provide a good basis for rich web client applications.

Although there was a steep learning curve, once the team 'got it' we had a good base to work against.  You will need to pick and choose between all the options out there; one of the really useful things about CSLA, apart from all the built in goodies like n-level undo and data binding, is that it imposes a standard pattern on the way business objects are built by developers so the team have a simple template to work inside.

tarekahf replied on Saturday, March 29, 2008

Thanks all for your feedback. It is really very useful.

Following is my initial feedback in general:

1. I took a closer look at CSLA, and I am really impresed with it. I think it will be very useful. But I need to complement it with a nice GUI Tool or something like that. I do not necessary have to get a complex engine to do the GUI for us (like DNN). For example, if there is a simple template that I can copy and paste or re-use, it will be OK. I want to avoid editing the commands for CSS, Skins and Themes ... I need something ready and easy to apply different templates. Something like CSS Switcher ?

2. Any feedback on the problems of DNN I mentioned earlier in this thread, and if there is any other alternatives ?

3. Teleriks looks very cool ... but they are costly ... I am not sure if this idea will be attractive to the management !!! Let us first exploit the free/open source path ...


Tarek.

tarekahf replied on Saturday, March 29, 2008

RikGarner:

We have an application that combines several "chunks of framework" from different sources into one coherent whole, of which CSLA was one.

The Enterprise Libraries provide a good set of "plumbing" code upon which you can build a CSLA based set of business objects (we used the data access app, cache and crypto blocks).

To build a UI on top of all that we used the Smart Client software factory which provides a framework for creating desktop apps. There is a web client equivalent which, combined with AJAX, should provide a good basis for rich web client applications.

Although there was a steep learning curve, once the team 'got it' we had a good base to work against.  You will need to pick and choose between all the options out there; one of the really useful things about CSLA, apart from all the built in goodies like n-level undo and data binding, is that it imposes a standard pattern on the way business objects are built by developers so the team have a simple template to work inside.


Thanks a lot.

I am intereseted in getting more info about the approach you followed ?

Did you use parts from DNN or Umbraco or the like ?

What do you think about using such CMS Tools ?

What do you think about re-using such Master Pages Templates, Skins, CSS, Themes ...etc... (which I mentioned in this thread earlier) and do some effort to make them work in a Dynamic Way for Menus and Site Navigation ?

Please give me some links on the Smart Client Software for web applications.

Tarek.

RikGarner replied on Monday, March 31, 2008

Most of the UI controls we used were out-of-the-box Windows Forms ones, although we did write a couple of controls ourselves. The smart client stuff is at http://msdn2.microsoft.com/en-us/library/aa480482.aspx.

I haven't had a chance to use the Web client software factory yet, although I expect to use it in the near future; it's msdn page is http://msdn2.microsoft.com/en-us/library/bb264518.aspx.

It does have support for master pages and probably other similar goodies too (it's been evolving for a couple of years now so I expect it will be pretty full-featured).

tarekahf replied on Wednesday, April 02, 2008

RikGarner:

Most of the UI controls we used were out-of-the-box Windows Forms ones, although we did write a couple of controls ourselves. The smart client stuff is at http://msdn2.microsoft.com/en-us/library/aa480482.aspx.

I haven't had a chance to use the Web client software factory yet, although I expect to use it in the near future; it's msdn page is http://msdn2.microsoft.com/en-us/library/bb264518.aspx.

It does have support for master pages and probably other similar goodies too (it's been evolving for a couple of years now so I expect it will be pretty full-featured).

Great !

I hope that CSLA.NET and WCSF do not overlap, or of they do overlap, it will be minimal. I do not want to confuse the team members about which framework to use for what part ??!!

So, as per my understanding, we will use CSLA.NET for developing the Business Logic and WCSF for the Front End, UI ...etc.  Is my understanding correct ?

Tarek.

RikGarner replied on Wednesday, April 02, 2008

Yes, that is what I am suggesting. You should make it clear that CSLA should be the basis of your business logic layer and that WCSF should be the framework you use to build your user interface. In practice I think you will find that easier than you might imagine.

It will probably be a good idea to have your business logic (built upon CSLA) in a different project from your UI. This has a couple of advantages; if there was ever a need, you could reuse your business logic dll for a winforms app. Also, you may find some of your team members tend to prefer working on one side or the other or have an aptitude in one area over the other.

 

tarekahf replied on Wednesday, April 02, 2008

I downloaded the CSLA.NET for ASP.NET 2.0, and tried to follow the instructions, but I have some errors.

Please see the details in this post:

http://forums.lhotka.net/forums/22456/ShowThread.aspx#22456

I appreciate your help.

Tarek.

MGervais replied on Wednesday, April 02, 2008

@RikGarner:

Can you shed some light on what your experience has been with the integration of CSLA and the SCSF? I am considering make use of the SCSF on top of our CSLA-based BOs but I have heard from others that it was not a easy/simple prospect.

Thanks.

RikGarner replied on Friday, April 04, 2008

The integration between CSLA and the UI framework was fine - most of the issues we had were due to the steep learning curve on the SCSF. It is a big framework with a lot of things to get your head around but once the picture starts to emerge from the mist it is an excellent platform on which to build an application.

We compounded the issue by using team members with no experience of CSLA or of the back end database (Oracle) Smile [:)]

In the end we didn't end up customising any of the guidance package stuff and just used the framework 'as-is'.

I'm happy to answer any specific questions if you have them.

tarekahf replied on Friday, April 04, 2008

RikGarner,

Did you have any chance to see the error I faced after I downlaoded and installed CSLA.NET and tried to run the smple PT Project ?

I need to put together a complate proposal and a working demo convering all aspects, and if I cannot resolve this error, I cannot propsoe CSLA.NET.

Your help will be greatly appreciated.

Tarek.

tarekahf replied on Friday, April 04, 2008

I need your recommendation on the best way to desing the classes in a reusable way using CSLA.NET.

Requirement:

The required data is stored in 2 different back-end Databases, say: Adabas and SQL Server, for example.

On the UI, sometimes we need to access the data only from Adabas, and some other times, from both, Adabas SQL Server, for example.

The SQL Sring for accessing the data from Adabas say:

select StaffID, StaffName, StaffAge from AdabasTable

The SQL Sring for access the data from SQL Server say:

select staffid, Salary from SQLServerTable

Each SQL String must be executed against the appropriate Connection String, which is stored in the web.config file.

How I can desing a Business Object (class) that can retrieve the list of staff, from Adabase only, then another class which is reusing the first one to retreive the same list which has both data from Adabas and SQL Server, and combine the result in one list ?

Say the calsss/methods look something like the followig:

StaffListAdabas.getStaffList(<some filter param>)
returns say DataTable

StaffListSQLServer.getStaffList(<some filter param>)
retruns say DataTable

The result should be used as a Data Source from some UI element like GridView.

I hope I was able to clarify my requirement and appreciate your help.

Tarek.

Cine replied on Friday, April 04, 2008

To me this looks like the standard inversion of control problem. Take an interface as parameter when you create your BO. The interface should have a function called getStaffList that returns a datatable, this way your BO does not need to know who, how or what is in control of fetching the object.

tarekahf replied on Saturday, April 05, 2008

Cine:
To me this looks like the standard inversion of control problem. Take an interface as parameter when you create your BO. The interface should have a function called getStaffList that returns a datatable, this way your BO does not need to know who, how or what is in control of fetching the object.

I am not sure if I made I was able to explain the problem I am facing corectly!

In the normal situation, the data is supposed to be stored in one Database say only from Adabas. So, the SQL String looks like the following:

"select StaffID, StaffName, StaffAge, Salary from AdabasTable;"
(Note: This is a simplistic example, of course, the actual case is mor complicated).

But the above cannot be done becuase the "Salary" is stored in different Database, in SQL Server, which requires another connection string.

One way to solve this problem, is to define a Linked Server in SQL Server, use OpenQuery() function to open the Adabas Table in SQL Server, and use one SQL String to join the tables between Adabas and SQL Server. But this methods defeets the value of OOP, as you may have already built a class to retrieve the first part, and all what you need to do is to get second part of the data from the other Database. The ideal way is to define another class and re-use the functionality of the first class, but I cannot figure out how to do that exactly.

So, we can simply build a Staff Class as follows:

(Note: The syntax my not be 100% correct, this is just for clarification purposes)

public class clsStaff1
private _StaffID as String
private _StaffName as String
private _StaffAge as Integer
private Salary as double
public propert ReadOnly StaffID() as String
  get
    return _StaffID
  end get
end property
...bla bla bla ...
... bla bla...
... same for StaffName, StaffAge, and Salaray ... read only is needed...
public shared function getStaffList() as DataTable
  con = open connection to Adabas Table
  SQLStr = "select StaffID, StaffName, StaffAge from AdabasTable"
  Execute the SQL String and return the DataTable using Adaptor for example !
end function
end class

The question is: How to define another class "clsStaff2" the re-uses the first class (inherits) and just add the the "Salary" from SQL Server Table ?

I think one way to do that is to do the Join between the 2 DataTables in the VB Code, is this possible ?

Is this approach practical in the first place ?

Tarek.

tarekahf replied on Saturday, April 05, 2008

Good news ! The error was resolved, and I managed to run PTWeb Project and PTWin Project successfully.

I am now working on developing a model/demo using CLSA.NET Framework with one of the applications, and I need help to get started.

Please allow me to post a different thread for each requirement, in order to make it easier to track and follow.

I will stop posting in this thread for getting help on how to use CSLA.NET to implement certain programming requirements. I am happy to receive any other comments in this thread which is related to the original subject.

Tarek.

Copyright (c) Marimer LLC