2009-07-23 27 views
8

WCF'yi kurmakta yeniyim, projeme devam ediyorum, ancak bir WCF projemde 5 farklı 'hizmet' var ve doğru şeyi yapıp yapmadığımı merak ediyorum. . Şu anki hizmetlerim veritabanı tablolarım için 1-1. Sonunda bir şeye benziyorum:WCF bir hizmet veya birden çok hizmet

public class Projects : IProjects 
{ 
    public List<Project> GetAll() 
    { 
     return (from p in Connection.Data.Projects 
       select new Project {ID = p.id, Name = p.name}).ToList(); 
    } 

    public Project GetByID(int id) 
    { 
     return (from p in Connection.Data.Projects 
       where p.id == id 
       select new Project {ID = p.id, Name = p.name}).First(); 
    } 

    public Project AddProject(string name) 
    { 
     var project = new Data.Projects {name = name}; 
     Connection.Data.AddToProjects(project); 
     Connection.Data.SaveChanges(); 

     return new Project {ID = project.id, Name = project.name}; 
    } 

    public void DeleteProject(int id) 
    { 
     var project = (from p in Connection.Data.Projects 
         where p.id == id 
         select new Project {ID = p.id, Name = p.name}).First(); 

     Connection.Data.DeleteObject(project); 
     Connection.Data.SaveChanges(); 
    } 
} 

Projemdeki her bir tablo için benzer bir sınıfa sahibim. Alt sınıflarla 1 hizmet bağlantısını kullanmak için bir yol bulmalı mıyım yoksa tablo başına 1 hizmet sınıfı olarak mı tutmalıyım?

cevap

8

"Buna bağlıdır!" :-) Tüm BT ve programlama soruları için standart cevap :-)

Bu 5 ayrı hizmete sahip olmanın yanlış bir şey görmüyorum - hepsini bir arada büyük bir hizmetle birleştirerek hiçbir şey elde edemezsiniz, Diyecektim ki. Onları ayrı tutmayı ve "yalın" olmayı tercih ederim.

Beş ayrı hizmetiniz varsa, her biri için ayrı ayrı erişim izinleri gibi şeyleri de yönetebilirsiniz, örn. Belirli kullanıcı gruplarının bir servisi değil, başka bir hizmeti kullanmasına izin verin.

Tekrar: Bence bunu gayet iyi yapıyorsun - Beş küçük, nimbler olana karşı büyük bir hizmete sahip olmaktan dolayı herhangi bir zorlayıcı sebep ya da fayda görmüyorum.

Bunu düşünün - önerebileceğim tek gerçek değişiklik, uygulamanızı yapmak istediklerine (yani uygulamanızı beklediğiniz işlemlere ve dolayısıyla hizmetinize) daha yakın olacak şekilde hizmetlerinizi tasarlamaya çalışmaktır. Onları veritabanına çok yakın modellemek yerine Verilerini saklayacakları temel mağaza yerine "görev odaklı" veya operasyon açısından düşünmeye çalışın.

Marc

+1

müthiş, teşekkürler dostum! –

+0

Görev tabanlı yaklaşım üzerinde anlaştı. Hizmetin bir depo olarak düşünülmemesi, ancak daha çok bir kullanım denetleyicisi IMO'su olması daha iyidir. Bununla birlikte, 5 ayrı hizmete sahip olmanın muhtemelen daha iyi bir kapsülleme olmasına rağmen, bazen yapılandırma/bakım/dağıtım ek yükünü artırdığını belirtmek isterim. Her zaman değil ama akılda tutmaya değer. – Stimul8d

İlgili konular