2010-06-25 1 views
0

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

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

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

Сервер

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(); 

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

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

+0

Почему вы не хотите использовать WCF? – Incognito

+0

Потому что я не очень хорошо это знаю. Я попробую. – Keeper

ответ

0

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

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

+0

Итак, с WCF я могу передать свои собственные классы, как мой пример выше? Вы знаете, где найти такие примеры? Спасибо – Keeper

+0

http://msdn.microsoft.com/en-us/library/aa480190.aspx – Spence

+0

Все, что вы можете создать для контракта данных, может быть отправлено через WCF. Вы даже можете «отправлять» потоки с помощью WCF, которые отлично подходят для очень больших передач. – Spence

0

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

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

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

Herbie