2013-09-04 24 views
5

używam ASP.NET MVC, budując ERP z Framework 4.0 oraz SQL Server 2008.
Moje pytanie jest gdzie powinien być umieszczony kwerendy? Podczas surfowania zobaczyłem wiele metod. Niewielu z nich są następujące:
Gdzie należy umieścić kwerend w ASP.NET MVC

  • W Models
  • W Separate Files, że są w DAL Folder
  • W Separate DAL Projekt

nadal jestem mylić o użyciu zapytań w Models po badaniach .

Dalsze informacje:
Używam prostego sposobu zapytania, nie Linq i Entity Framework.
Mam również plan konwersji tego projektu na Desktop Application w przyszłości.

Inną kwestią jest to, że Jak business Logic prace w ASP.NET MVC jeśli go używać?

Szczegóły O Projekcie
Jest Website + Online Information System spółki z około 40-50 stron obu.
Użytkownik może wprowadzić numer Info System, logując się pod numerem website.

Przed oddaniem głosu do zamknięcia Pozostaw komentarz, aby móc się czegoś nauczyć.

+0

Próbujesz wybrać architekturę i nie można odpowiedzieć, jeśli nie zapewniają znacznie więcej informacji na temat Twoja aplikacja, wymagania itp. – VahidNaderi

+0

Cóż, zapomniałem o szczegółach aplikacji.Zaktualizowałem –

Odpowiedz

6

Twoje pytanie dotyczy infrastruktury projektu, który zależy od wielu czynników.

Biorąc pod uwagę informacje podałeś w swoim pytaniu:

Mam zamiar również przekonwertować ten projekt w aplikacji pulpitu w przyszłości.

ze względu na użyteczność, powinieneś mieć swój Data Access Layer w oddzielnym projekcie.

Jeśli chcesz uzyskać więcej informacji o infrastrukturze projektu, polecam ci: Microsoft Spain - Domain Oriented N-Layered .NET 4.0 Sample App, która jest dobrze udokumentowana i zawiera wiele informacji, które są niezbędne do stworzenia aplikacji na poziomie przedsiębiorstwa.

2

Myślę, że nie ma reguły mustdo. Każdy ma własne podejście. W swoich aplikacjach tworzę katalog Helpers ze statycznymi klasami pomocniczymi. Na przykład można utworzyć class DBLogic:

public static class DBLogic 
{ 
    public static List<Clients> GetAllClient() 
    { 
    //**your query here 
     return //**some result 
    } 
} 

niż w kontrolerze, gdy trzeba liście klientów

public ActionResult Index() 
{ 
    var clients = DBLogic.GetAllClient() 

    return View(clients); 
} 

To jest moje podejście. Wystarczająco logiczne, jak dla mnie.

1

We wszystkich moich dotychczasowych pracach tworzymy oddzielny projekt DAL, w którym umieszczamy wszystkie nasze wywołania w bazach danych. Ale myślę, że to naprawdę tylko dla organizacji i trzymania rzeczy w separacji. Jeśli jest to mniejszy projekt, myślę, że po prostu umieszczenie go w oddzielnej klasie byłoby w porządku. Nie jestem jednak pewien w tym modelu, ale dla mnie sens.

4

Ideą MVC jest SEPARATION. Nie myślę zbyt wiele, JEŚLI jakakolwiek logika lub dostęp do danych powinien być w ogóle w kontrolerach. Większość tworzonych przeze mnie stron i aplikacji kończy się przy użyciu projektu API, co sprawia, że ​​łatwo jest tam wrzucić dostęp do bazy danych. To naprawdę zależy od ciebie i sprowadza się do jedno pytanie: pytanie: Czy chcę zorganizowane rozwiązanie?

To drażliwy temat z większością, ale z doświadczenia wiem, że zorganizowanie bardziej uporządkowanego rozwiązania/projektu pozwoli na lepszą praktykę później. Ponieważ planujesz później przekonwertować aplikację na komputer, zdecydowanie sugerowałbym przeniesienie DAL do osobnego projektu za pomocą interfejsu API. W ten sposób wystarczy wpisać kod raz.

+0

czy jest to rutynowe zachowanie DataAccess w Modelu podczas pracy nad małym projektem –

+0

Powiedziałeś, że "logika lub dostęp do danych nie powinien wchodzić w kontrolery" Chcę wiedzieć o modelach. –

+0

@syedmohsin Unikałbym wprowadzania dostępu do danych w modelach. Zazwyczaj są one odpowiedzialne za * reprezentację * danych, nie ponoszą odpowiedzialności za uzyskanie tych danych lub ich wysłanie. – technicallyjosh

1

Można utworzyć folder DAL Lub można utworzyć oddzielną DAL projektu, aby napisać kod dostępu do danych

1

Powiedzmy Ja się KOSZYK scenariusza, który obejmuje następujące etapy:

  1. Get Koszyk z baza
  2. podatek Oblicz
  3. Razem wszystko

Project.Core (Ma wszystkie klasy domen)

public CartItem 
{ 
    public int Id { get; set; } 
    public string Desc { get; set; } 
} 

public CartDetails 
{ 
    public int Id { get; set; } 
    public List<CartItem> CartItems { get; set; } 
    public Decimal Tax { get; set; } 
    public Decimal Total { get; set; } 
} 

Project.DAL

public class CartDAL 
{ 
    public List<CartItem> GetCart(int cartId) 
    { 
    //execute sql here, get datareader or datatable 
    //loop thru the rows and mait into a List<CartItem> 

    return List<CartItem> 
    } 
} 

Look w Dapper lub Masywny, zamiast ręcznie jak powyżej.

http://code.google.com/p/dapper-dot-net/

https://github.com/robconery/massive

Project.BLL

public class CartBLL 
{  
    CartDAL cartDAL = new CartDAL(); 
    public CartDetails GetCartDetails(int cartId) 
    { 
    var cartDetails = new CartDetails(); 
    cartDetails.CartItems = cartDAL.GetCart(cartId); 
    cartDetails.Tax = cartDAL.GetCart(cartId); 
    cartDetails.Total = cartDAL.GetCart(cartId); 
    return cartDetails; 
    } 
} 

Project.Web

public class CartController 
{ 
    CartBLL cartBLL = new CartBLL(); 
    public ActionResult Index(int Id) 
    { 
     var cartDetails = cartBLL.GetCartDetails(Id); 

     // Make a cartViewModel 

     View(cartViewModel); 
    } 
} 

Project.WPF

//Nothing much changes in desktop comapared to Web, just call the BLL stuff and you are set 
CartBLL cartBLL = new CartBLL(); 
var cartDetails = cartBLL.GetCartDetails(Id); 
//Populate view 

Więc w zasadzie trzeba ponownie użyć BLL we wszystkich projektach Zaczepy

+0

BLL nie powinien odnosić się do DAL. Zwykle definiuję podmioty biznesowe w BLL (należą one tam moim zdaniem) i odwołują się do BLL z DAL. BLL zawiera również interfejsy do abstrakcyjnego repozytorium/context/..., a DAL implementuje jeden i skleja je razem za pomocą DI. – Maarten

+0

http://stackoverflow.com/questions/12214371/use-of-bal-in-3-tier-architecturehow-to-all-methods-from-dal-to-bal/12214997#12214997 – Maarten

+0

Zgadzam się, zrobiłem Chciałby zmylić OP z złożonymi problemami, takimi jak DI, kiedy wydaje się, że dopiero zaczyna. – sunil

Powiązane problemy