Witam ponownie ;)
Uczę się obecnie WPFa i EF i próbuję to ze sobą jakoś połączyć. Póki co jeśli chodzi o EF wykorzystałem DB First.
I teraz pytanie, gdzie zawrzeć "logikę biznesową"? Nie wiem w sumie czy to określenie pasuje, ale może wyjaśnię.
Struktura mojej aplikacji to m.in. folder Views z xamlami, ViewModels, Services, Models gdzie wrzucam model z bazy i jeden dodatkowy z klasami do MVVM. I teraz tak. Mam małe okienko do logowania. Dwa pola login i hasło. W folderze Models mam model edmx wygenerowany na podstawie bazy, gdzie mam tabelę z użytkownikami oraz klasę modelu Users, również wygenerowana z bazy. Coś takiego:
namespace WpfApp6.Models
{
using System;
using System.Collections.Generic;
public partial class User
{
public int Id { get; set; }
public string Username { get; set; }
public string PasswordHash { get; set; }
}
}
Jeśli chodzi o przepływ danych to po kliknięciu przycisku w widoku ViewModel ustawia wartość labelki na podstawie danych.
private void Click()
{
if (UserService.LoginUser(new Models.Users(username, password)))
{
Message = "Logowanie ok!";
}
else
{
Message = "Logowanie nieudane!";
}
}
W serwisie mam logikę do sprawdzania danych w bazie. Pomijam bezpieczeństwo i sposób sprawdzania, chciałem tylko sprawdzić jak to wszystko ze sobą działa.
public static class UserService
{
public static bool LoginUser(User user)
{
using (var company = new CompanyDBEntities1())
{
Users userToCheck = company.Users.FirstOrDefault(u => u.Username.Equals(user.Username));
if (userToCheck == null)
{
return false;
}
return userToCheck.PasswordHash.Equals(user.PasswordHash);
}
}
}
Nie wiem czy sposób z klasą statyczną w tym UserService jest ok, ale nie miałem innego pomysłu.
No i teraz przejdę do tego do czego mam pytanie.
Jak widać z kodu powyżej w klasie User potrzebuję konstruktora dwuargumentowego. Problem w tym, że nie powinienem edytować klasy User z modelu bo przy updacie modelu mi ją stworzy na nowo.
Jak to w takich sytuacjach się robi? Ja to obszedłem w ten sposób, że w tym samym namespace w katalogu Models stworzyłem partial class User i tam dopisałem konstruktory. Jednak nie wiem, jaka jest dobra praktyka jeśli chodzi o to... Co do pytania o logikę biznesową to chodzi mi o m.in. metody na klasie modelu User.