2013-09-22 4 views
0

Я создаю новый способ сделать что-то в своем проекте, и мне нужна какая-то помощь в какой-то момент. У меня есть 3 проекта в моем решении:Circle reference (поставщик -> модель -> поставщик)

Бизнес, провайдер и модель.

модель проекта, является тот, что у меня есть классы, так же, как таблицы в базе данных: Ex:

public class Person 
    property Id as integert? 
    property Name as string 
    property CPF as string 
end class 

проект ПРОВАЙДЕР, это тот, который делает связь с базой данных:

public class PersonProvider 
    public function ListPerson(filter as model.person) as list(of model.person) 

    public sub insertPerson(byRef person as model.peson) 

    public sub updatePerson(byRef person as model.peson) 

    public sub deletePerson(byRef person as model.peson) 
end class 

и, наконец, у меня есть проект BUSINESS, это проект, который предоставляет методы CRUD для веб-сайта (веб-сайт не должен иметь доступ к ПРОВАЙДЕРУ, потому что у нас есть бизнес-логика в БИЗНЕСЕ)

public class PersonBusiness 
    public function ListPerson(filter as model.person) as list(of model.person) 
      return (new provider.PersonProvider).listPerson(filter) 
    end public 

    public sub InsertPerson(byRef person as model.person) 
      dim provider as new provider.PersonProvider() 
      provider.insertPerson(person) 
    end public 

... 

end class 

Но, я пришел к проблеме, когда мне нужно некоторые внутренние соединения, как это:

таблицы КЛИЕНТ имеет id_person, поэтому в model.Customer у меня есть свойство IdPerson как целое?

, но я хочу, чтобы иметь свойство Имени и СПЛ, что model.Person есть, только для чтения свойства в model.Customer, так что я сделал:

Property IdPerson As Integer? 
    Private _person As Pessoa 
    Private ReadOnly Property Person As model.Person 
     Get 
      If IsNothing(_person) Then 
       _person = New provider.PersonProvider.ListPerson(new model.Person with {.Id = Me.IdPerson}) 
      End If 
      Return _person 
     End Get 
    End Property 

    ReadOnly Property Name As String 
     Get 
      Return Me.Person.Name 
     End Get 
    End Property 

    ReadOnly Property CPF As String 
     Get 
      Return Me.Pessoa.CPF 
     End Get 
    End Property 

и здесь возникает вопрос .. . Я обнаружил, что я не могу иметь ссылки как:

сайт справочной модели и бизнеса

поставщика эталонной модели

Бизнес эталонной модели и Прит IDER

но делать только для чтения свойств модели требуется ссылка на поставщик, и что вызывает круг reference..visual студии не позволяет мне сделать это ...

идеи, как сделать это?

Извините, что мое сообщение стало таким длинным, я просто хотел прояснить ситуацию.

ответ

0

Вместо того, чтобы обращаться к модели по веб-сайту и бизнесу, вы можете добавить еще один класс, который ссылается на Поставщика и человека, и этот новый класс будет ссылаться на Веб-сайт и Бизнес (вместо прямого доступа к веб-сайту и бизнесу).

+0

хм, извините, но я не могу понять .. как это я заполняю объект Person на веб-сайте, чтобы передать его бизнесу, если у меня нет ссылки на модель? –

+0

Новый класс будет использоваться для заполнения экземпляра Person, а экземпляр нового класса (и, следовательно, экземпляр Person) можно передать в Business. – xpda

Смежные вопросы