473,800 Members | 2,689 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

Generic/Adoptive User Interface Design

Hi all,

I have been working on an ASP.NET application that is a kind of wizard ( a
list of sequential pages ). We built that application for the CLIENT-A and it
worked fine. After six months CLIENT-B came along and and requested the same
application but with little bit different requirements (both in terms of the
front-end and back-end processing), so we had to create a new application for
that client. Now came CLIENT-C !!!!!!

I am not into the favor of creating one more application for this client and
have been thinking about creating one generic application that will fit most
of our clients needs; I mean the application has to change the behavior based
on the client for which it has been called.

For example, CLIENT-A requires all pages to be shown in a sequence (Page1,
Page2, Page3, Last Page). CLIENT-B does not want to show Page1, rather they
want to show Page2, and the Last Page. CLIENT-C wants to show all of the
pages in the same sequence but has less data entry fields on some of the
forms!!!

Now is there a way I can implement/architect/design a generic/semi-generic
application that would change its behavior based on the client for which it
has been invoked for? any design pattern that would do the trick for this
kind of application? any insights?

Thanks in advance.

Stewart
Nov 19 '05 #1
2 1202
If your clients login, you can use the client id associated with their
userids to read a database table that defines the names of the pages
that you will redirect to. It's not very difficult to do actually. I
use this technique all the time with Intranet applications where the
users login in, and based on their roles, I display menus with lists of
pages that they can access. All pages verify that the user's role is
valid for that page, and if not bounce the user back to the login page.

So, in its simplest form, you need a database table for the users and
passwords, a table that links userids to client companies, and a table
that links client companies with pages. Then use a session variable or
a viewstate variable to pass the client id from page to page after the
client logs in.

Nov 19 '05 #2
Thanks for sharing your experience.

I do understand that and I was thinking along that direction but my
requirements are just not that simple! I know I can walk user through a bunch
of pages driven from a database table but there is more to it. Such as:

(1) Pages may have different data entry fields for each client
(2) Pages may have different data validation rules for fields for each
client (first name should be at most 50 characters for CLIENT-A but should be
40 characters for CLIENT-B, etc).
(3) Pages may have to do some "pre" and "post" processing that might be
specific for each client (For example, CLIENT-A wants Page1 to come up with
empty fields, whereas CLIENT-B wants Page1 to talk to client's web service to
fetch data and fill the fields, etc)
(4) and ofcourse user interface images and asthetic changes for each client!

that is the kind of app I am talking about here.

Any help guys?

thanks,
Stewart

"rm*******@yaho o.com" wrote:
If your clients login, you can use the client id associated with their
userids to read a database table that defines the names of the pages
that you will redirect to. It's not very difficult to do actually. I
use this technique all the time with Intranet applications where the
users login in, and based on their roles, I display menus with lists of
pages that they can access. All pages verify that the user's role is
valid for that page, and if not bounce the user back to the login page.

So, in its simplest form, you need a database table for the users and
passwords, a table that links userids to client companies, and a table
that links client companies with pages. Then use a session variable or
a viewstate variable to pass the client id from page to page after the
client logs in.

Nov 19 '05 #3

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

1
1612
by: Stewart Rogers | last post by:
Hi all, I have been working on an ASP.NET application that is a kind of wizard ( a list of sequential pages ). We built that application for the CLIENT-A and it worked fine. After six months CLIENT-B came along and and requested the same application but with little bit different requirements (both in terms of the front-end and back-end processing), so we had to create a new application for that client. Now came CLIENT-C !!!!!! I am...
3
4146
by: zlst | last post by:
Many technological innovations rely upon User Interface Design to elevate their technical complexity to a usable product. Technology alone may not win user acceptance and subsequent marketability. The User Experience, or how the user experiences the end product, is the key to acceptance. And that is where User Interface Design enters the design process. While product engineers focus on the technology, usability specialists focus on the user...
17
3331
by: Andreas Huber | last post by:
What follows is a discussion of my experience with .NET generics & the ..NET framework (as implemented in the Visual Studio 2005 Beta 1), which leads to questions as to why certain things are the way they are. ***** Summary & Questions ***** In a nutshell, the current .NET generics & .NET framework make it sometimes difficult or even impossible to write truly generic code. For example, it seems to be impossible to write a truly generic
5
2823
by: Richard Brown | last post by:
Ok, I've been looking through the .NET SDK docs and stuff. I'm wondering if you can provide a control extender that does generic validation or functionality just by dropping it on the form. For instance, using the IExtenderProvider interface, you can specify properties, but there is nothing documented about linking into a control's events. For instance, in my application, there are specific formatting, functionality and validation for...
1
1616
by: HC | last post by:
I've stripped down my code to barebones to demonstrate (below). I have interfaces and classes which implement them. I force my generic collection to accept only the interface type. If I create an instance of the generic class using the class implemention of the interface I find it can't be converted to the interface version, and vice versa. This a pain with my current design. Can someone please advise on what best practice might be in...
2
1531
by: Harold Howe | last post by:
Howdy all, I am getting a compiler error regarding a consrained conversion. It complains that it can't make the type conversion, even though the generic type argument inherits from the target of the conversion. I have trimmed my source down as much as possible. The classes implement something that behaves sort of like the Mediator design pattern, but where the colleagues are abstract, and can be added or removed on the fly. I guess...
8
3916
by: kasper.rung | last post by:
I have a problem formulating a test to see if an object is implementing a generic interface. I have the following: public interface IGeneric<T> { void Foo(); }
9
12854
by: mps | last post by:
I want to define a class that has a generic parameter that is itself a generic class. For example, if I have a generic IQueue<Tinterface, and class A wants to make use of a generic class that implements IQueue<Tfor all types T (so it can make use of queues of various object types internally). As useful as this is, it doesn't seem possible. The natural (but illegal) notation would be something like class A<QueueClasswhere QueueClass :...
10
2715
by: phancey | last post by:
I'm quite new to generics. I have 2 generic classes: MyClass<Tand MyOtherClass<T>. MyClass<Thas 2 public Add methods Add(MyOtherClass<T>); Add(MyOtherClass<Wrapper<T>>); (Wrapper<Tis another class that contains an object of type T) I have a third generic class: MyHandler<Twhich contains 2 Add methods and a generic method: Add(T obj)
2
1887
by: =?Utf-8?B?Sm9obk1TeXJhc29mdA==?= | last post by:
I have a generic class defined. My "server" code wants to call methods on the generic class after I've assigned the type to it. I was trying to do this via a SELECT CASE statement but I can't seem to determine how to declare the object at the module level (so I can use it in several methods) but assign the type when I create the instance. Probably this isn't the appropriate way to use Generics so if there are suggestions, I'm open to...
0
9553
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can effortlessly switch the default language on Windows 10 without reinstalling. I'll walk you through it. First, let's disable language synchronization. With a Microsoft account, language settings sync across devices. To prevent any complications,...
0
10509
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed. This is as boiled down as I can make it. Here is my compilation command: g++-12 -std=c++20 -Wnarrowing bit_field.cpp Here is the code in...
0
10281
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that captivates audiences and drives business growth. The Art of Business Website Design Your website is...
1
10256
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
0
10039
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the choice of these technologies. I'm particularly interested in Zigbee because I've heard it does some...
0
9095
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own.... Now, this would greatly impact the work of software developers. The idea...
1
7584
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules. He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms. Adolph will...
0
5612
by: adsilva | last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
2
3765
muto222
by: muto222 | last post by:
How can i add a mobile payment intergratation into php mysql website.

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.