Inheritanse, insertions and not only that

Discussion in 'ASP .Net' started by Dmitri Shvetsov, Apr 7, 2004.

  1. Hi All,

    I post this message in three newsgroups, maybe somebody can say something
    helpful.

    The ASP.NET C# Web app consists of two parts - the Mobile part (PDA) and the
    regular desktop browser (2000/XP) part. The business logic of both parts is
    absolutely the same. I don't want to make a full copy of the business logic
    in both parts but it seems to me that I don't have any choice. What's done
    now. I created an initial page, this page is empty, it just detects the
    remote browser version and redirects the program's flow to the required
    part - for PDA browser or for 2k/XP browser.

    I made both sets of pages almost in the same manner, the controls are
    originally different, Mobile and Regular, but these controls are having the
    same names and can be managed by the same business logic, thanks to VS for
    this flexibility, I made a full copy of a business logic for both sets of
    pages and it works.

    I hate this solution. If I need to change something I need to change both
    codes and keep in mind what code has already been changed and why.

    If I could use the inheritance in this case it would be excellent, but I
    can't, because VS doesn't support the video inheritance yet, maybe in
    future, but nobody promised yet. I use a lot of controls in the logic and
    can't make a root class because in this case all these controls will not be
    visually inherited, and as I wrote above the origins of these controls are
    different - Mobile and Regular.

    I can't use #INCLUDE like in C++ to include the same parts of the source
    codes. Why? I hate that in VS. Lazy programmers or what? Future versions?..

    What I'm having now are almost same class files, excluding the
    initialization parts that the Visual Studio generated for the different
    controls.

    What can I do to cut off the same code from two different places and maybe
    to import it from some external file, one for two different class files?
    It's terrible but I didn't see that the current version of VS can support
    something like #INSERT or #IMPORT except for help files.

    Please, help, any ideas will be appreciated.

    Dmitri.
     
    Dmitri Shvetsov, Apr 7, 2004
    #1
    1. Advertising

  2. "Dmitri Shvetsov" <dshvetsov[I really don't like spam @]cox.net> wrote in
    message news:vpHcc.35$Wo6.5@fed1read03...
    > Hi All,
    >
    > The ASP.NET C# Web app consists of two parts - the Mobile part (PDA) and

    the
    > regular desktop browser (2000/XP) part. The business logic of both parts

    is
    > absolutely the same. I don't want to make a full copy of the business

    logic
    > in both parts but it seems to me that I don't have any choice.


    Generally, "business" logic can be shared assuming you structure your app
    such that presentation and business logic are kept separate.

    My guess is that you need to refactor your code such that as much common
    functionality is encapsulated in real "business" classes. These classes will
    not know about presentation stuff, but are used by the presentation classes.

    Take a login form, for instance. You would probably make a:
    desktop/login.aspx and desktop/login.aspx.cs
    and also
    mobile/login.aspx and mobile/login.aspx.cs

    Both of these pages will have text boxes for username, password, and a
    button to login. The event handler for that button click event on each page
    should probably instantiate and call a method in a third business class:

    void button_click (object sender, EventArgs args) {
    LoginLogic loginLogic = new LoginLogic();
    if (loginLogic.LoginUser(username.text, password.text)) {
    Response.Redirect(loggedInPage);
    } else {
    Response.Redirect(failedPage);
    }
    }

    that third class (LoginLogic) will have all your real business logic. Your
    presentation classes, then, can hopefully be kept quite simple.

    You can go further and create a common presentation helper class that can
    take on even more of the common functionality. For instance:

    public class CommonLogin {

    private Page currentPage;

    public CommonLogin (Page page) {
    currentPage = page;
    }

    public void HandleLoginClick(sender object, EventArgs args) {
    LoginLogic loginLogic = new LoginLogic();
    if (loginLogic.LoginUser(username.text, password.text)) {
    currentPage.Response.Redirect(loggedInPage);
    } else {
    currentPage.Response.Redirect(failedPage);
    }
    }
    }

    then in your two aspx.cs pages, you'd create an instance of CommonLogin, and
    add event handlers to it. something like:

    button.clicked += new EventHandler (commonLogin.HandleLoginClick);


    Please note, all above code was written in the e-mail client, so I'm sure
    there are many syntax problems. Hopefully, though, it will help you get
    started.

    --
    Mike Mayer, C# MVP

    http://www.mag37.com/csharp/
     
    Michael Mayer [C# MVP], Apr 10, 2004
    #2
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Marcio DeBarros
    Replies:
    0
    Views:
    337
    Marcio DeBarros
    Oct 9, 2003
  2. Replies:
    7
    Views:
    412
  3. m4dc4p
    Replies:
    2
    Views:
    100
    Robert Klemme
    Nov 24, 2005
  4. Brian A
    Replies:
    1
    Views:
    115
    Brian A
    Oct 15, 2007
  5. Melzzzzz
    Replies:
    0
    Views:
    333
    Melzzzzz
    Aug 13, 2012
Loading...

Share This Page