By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
440,496 Members | 1,528 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 440,496 IT Pros & Developers. It's quick & easy.

Abstraction question

P: n/a
I am using dOOdads as my persistence layer.

I have a business object Person that sits in a Project called DOMAIN
I have 2 dOOdads in a project called BLL.

one is _Person and is declared MustInherit
the other is Person and is my concrete class.

My main goal of BLL.Person is to protect custom methods and properties
against regeneration.

DOMAIN.Person is my actual object for all my Rules and such for person.

so in DOMAIN.Person I have code like this

Private _person As BLL.Person

Public Function getPersonByID(ByVal id As Integer) As BLL.Person

If _person.LoadByPrimaryKey(id) = False Then
Throw New Person.InvalidPersonException
End If
Return _person

End Function

The problem is I am getting the following error in my compiler:
Construct makes an indirect reference to project 'WavelengthIS.CMR.BLL',
which contains 'WavelengthIS.CMR.BLL.Person'. Add a project reference to
'WavelengthIS.CMR.BLL' to your project. C:\Documents and
Settings\ecathell\My Documents\Visual Studio
2005\Projects\WavelengthIS\CMR-Versioned\NunitTESTS\Form1.Designer.vb

Now I am sure there is some design way around this. I am just delving into
some of the more complex patterns and the thought is at the tip of my brain.
I am missing an interface somewhere( probably in my function) as IPerson.

but if I do an interface on IPerson...how do I maintain the bll._person to
bll.Person inheritence?

Hopefully what I am asking makes some kind of sense.
Sep 6 '06 #1
Share this Question
Share on Google+
2 Replies


P: n/a
Sept. 6, 2006

I don't quite understand the question completely, but if you are wanting
your code to work and explain why the error is occuring.... it may be
because you have declared a variable "_person" which is the exact same name
as the MustInherit class _Person (I don't believe class names & variables
are case-insensitive in C#... like if you have Button1 object on your
windows form, you can't declare "button1" in your code.)

So anyway, try changing your _person variable to something else like
"persontoreturn" or something.

Hope this helps and is what you were asking for!
--
Joseph Bittman
Microsoft Certified Solution Developer
Microsoft Most Valuable Professional -- DPM

Web Site/Blog: http://CactiDevelopers.ResDev.Net/

"Eric Cathell" <de**********@community.nospamwrote in message
news:ed****************@TK2MSFTNGP05.phx.gbl...
>I am using dOOdads as my persistence layer.

I have a business object Person that sits in a Project called DOMAIN
I have 2 dOOdads in a project called BLL.

one is _Person and is declared MustInherit
the other is Person and is my concrete class.

My main goal of BLL.Person is to protect custom methods and properties
against regeneration.

DOMAIN.Person is my actual object for all my Rules and such for person.

so in DOMAIN.Person I have code like this

Private _person As BLL.Person

Public Function getPersonByID(ByVal id As Integer) As BLL.Person

If _person.LoadByPrimaryKey(id) = False Then
Throw New Person.InvalidPersonException
End If
Return _person

End Function

The problem is I am getting the following error in my compiler:
Construct makes an indirect reference to project 'WavelengthIS.CMR.BLL',
which contains 'WavelengthIS.CMR.BLL.Person'. Add a project reference to
'WavelengthIS.CMR.BLL' to your project. C:\Documents and
Settings\ecathell\My Documents\Visual Studio
2005\Projects\WavelengthIS\CMR-Versioned\NunitTESTS\Form1.Designer.vb

Now I am sure there is some design way around this. I am just delving into
some of the more complex patterns and the thought is at the tip of my
brain. I am missing an interface somewhere( probably in my function) as
IPerson.

but if I do an interface on IPerson...how do I maintain the bll._person to
bll.Person inheritence?

Hopefully what I am asking makes some kind of sense.

Sep 6 '06 #2

P: n/a
I got that issue solved but lets carry on with this conversation. I think I
am confused about abstraction.
we have a class

Namespace myCompany.MyProgram.DAL
Protected MustInherit Class _Person

members
properties
methods

end Class
end Namespace

Now This class is kept in a separate project so that DAL will compile into
its own DLL.

next we have this

imports myCompany.MyProgram.DAL

Namespace myCompany.MyProgram.BLL
Public Class Person
Inherits _Person

members
properties
methods

end Class
end Namespace

Once again this is kept in a separate project so that BLL will compile into
its own DLL.

Now if I want to create a facade layer(because person has several dependent
objects that the end user really doesnt need to know about.

So now I have

Namespace myCompany.MyProgram.Domain
Public class PersonFacade

private _p as Person

public sub new()
_p=new Person
end sub
public sub SimplePersonMethodAccessor
_p.DoSomething

End Class
End NameSpace

Now my PersonFacade must have a reference to BLL *AND* DLL otherwise the
properties and such in DLL wont be visible. (maybe my visibility is wrong)
How is this abstracting? I understand why the reference is needed to
BLL...but why DLL too? Shouldn't DLL be totally insulated from knowledge?

It seems a lot of the patterns I have been looking over work logically
well...until you throw in a datastore. Then the reasons for decorators or
bridges or strategy patterns disappear...

I have been looking into NHibernate..but I am working on a large project so
I am using dOOdads instead. But I want a good level of abstraction between
my web interface and my BLL thus the facade...But if I ever had to change
the backend implementation or the datalayer changed for some reason I need
to know that I am abstracted enough from the interface.

I have read Headfirst Design patterns. I have the Wrox Professional design
patterns book. But like I said none of them really tackle patterns from the
point of having a persistence layer. A lot of the reason for the some of the
patterns are invalidated(in my mind) when you have a datastore.
"Joseph Bittman MVP MCSD" <Ry*********@msn.comwrote in message
news:%2****************@TK2MSFTNGP02.phx.gbl...
Sept. 6, 2006

I don't quite understand the question completely, but if you are wanting
your code to work and explain why the error is occuring.... it may be
because you have declared a variable "_person" which is the exact same
name as the MustInherit class _Person (I don't believe class names &
variables are case-insensitive in C#... like if you have Button1 object
on your windows form, you can't declare "button1" in your code.)

So anyway, try changing your _person variable to something else like
"persontoreturn" or something.

Hope this helps and is what you were asking for!
--
Joseph Bittman
Microsoft Certified Solution Developer
Microsoft Most Valuable Professional -- DPM

Web Site/Blog: http://CactiDevelopers.ResDev.Net/

"Eric Cathell" <de**********@community.nospamwrote in message
news:ed****************@TK2MSFTNGP05.phx.gbl...
>>I am using dOOdads as my persistence layer.

I have a business object Person that sits in a Project called DOMAIN
I have 2 dOOdads in a project called BLL.

one is _Person and is declared MustInherit
the other is Person and is my concrete class.

My main goal of BLL.Person is to protect custom methods and properties
against regeneration.

DOMAIN.Person is my actual object for all my Rules and such for person.

so in DOMAIN.Person I have code like this

Private _person As BLL.Person

Public Function getPersonByID(ByVal id As Integer) As BLL.Person

If _person.LoadByPrimaryKey(id) = False Then
Throw New Person.InvalidPersonException
End If
Return _person

End Function

The problem is I am getting the following error in my compiler:
Construct makes an indirect reference to project 'WavelengthIS.CMR.BLL',
which contains 'WavelengthIS.CMR.BLL.Person'. Add a project reference to
'WavelengthIS.CMR.BLL' to your project. C:\Documents and
Settings\ecathell\My Documents\Visual Studio
2005\Projects\WavelengthIS\CMR-Versioned\NunitTESTS\Form1.Designer.vb

Now I am sure there is some design way around this. I am just delving
into some of the more complex patterns and the thought is at the tip of
my brain. I am missing an interface somewhere( probably in my function)
as IPerson.

but if I do an interface on IPerson...how do I maintain the bll._person
to bll.Person inheritence?

Hopefully what I am asking makes some kind of sense.


Sep 7 '06 #3

This discussion thread is closed

Replies have been disabled for this discussion.