C # Remoting организация классов - PullRequest
0 голосов
/ 25 июня 2010

Я занимаюсь разработкой библиотеки классов Remoting, чтобы я мог хранить взаимодействие с базой данных и бизнес-объекты на сервере, а не на клиентах.

Я хотел бы иметь возможность возвращать свои собственные объекты клиентамчтобы они могли взаимодействовать с ними через сам сервер.

Например (полупсевдокод):

Сервер

class Database { ... }
class Utility
{
  public User getUser(username)
  {
     return new User(username);
  }
}
class User
{
  public string[] getPerms()
  {
    return Database.query("select * from permission where user = " + this.username);
  }
}

Клиент

Utility utility = (Utility)getRemotingClass("Utility");
User user = Utility.getUser("admin");
string[] perms = user.getPerms();

Как я могу организовать свои классы / пространства имен?Меня особенно интересуют ссылки на классы и масштабируемость моей системы.

Любая критика / предложения действительно приветствуются.

Ответы [ 2 ]

0 голосов
/ 25 июня 2010

Я склонен помещать все разделяемые классы (Data Transfer Object) в отдельную DLL, на которую ссылаются и сервер, и клиент (вы можете поместить их в ту же DLL, что и классы сервера, если вы собираетесь распространять это все равно с кодом клиента).

Помещая их в отдельную сборку, вы усиливаете разделение DTO и лежащую в основе технологию, используемую для их удаленной передачи. Это означает, что если вы в конечном итоге переписываете технологию удаленного вызова, вам не нужно будет трогать DTO и можно просто повторно использовать сборку.

Не забудьте пометить DTO как атрибут [Serailizable], чтобы их можно было транспортировать между клиентом и сервером.

Херби

0 голосов
/ 25 июня 2010

Я не хочу бить в барабан, но вы можете заглянуть в WCF. Удаленное взаимодействие является очень болтливым, и реальная поддержка для поддержания чистых интерфейсов .Net осуществляется через WCF и передачу сообщений, в отличие от полного управления состоянием объекта посредством удаленного взаимодействия.

Похоже, что вы делаете, разрабатывает средний уровень для управления соединениями с базой данных. Просто убедитесь, что вы не перестроите интерфейс для SQL-сервера.

...