UR.ANUS
Asp.net mvc framework
вернуться

Магдануров Гайдар Ильдарович

Шрифт:

.SingleOrDefault(x => x.productId == productId);

}

public IEnumerable<IProduct> GetAvailableProducts

{

return _dataBase.Products.Where(x => x.isAvailable)

.Select<Product, IProduct>(x => x);

}

public IEnumerable<IProduct> GetProductListByName(string name)

{

if (string.IsNullOrEmpty(name))

throw new ArgumentException("name");

return _dataBase.Products

.Where(x => x.name.Contains(name))

.Select<Product, IProduct>(x => x);

}

}

Далее создадим сервисы, которые будут помогать нам манипулировать данными. Сначала определим интерфейсы сервисов:

public interface ICustomerService {

ICustomer Create(string name, string phone, string address);

void Delete(ICustomer customer);

void Update(ICustomer customer, string name,

string phone, string address);

}

public interface IOrderService {

IOrder Create(ICustomer customer, IProduct product, int count,

DateTime orderDateTime);

void Delete(IOrder order);

void Update(IOrder order, ICustomer customer,

IProduct product, int count, DateTime orderDateTime);

}

public interface IProductService {

IProduct Create(string name, bool isAvailable, decimal cost);

void Delete(IProduct product);

void Update(IProduct product, string name,

bool isAvailable, decimal cost);

Реализуем интерфейсы сервисов, как показано в листинге 3.4, для класса customerService. Чтобы уменьшить количество кода, приводить реализацию для других классов мы не будем, для остальных классов определяем методы Create, Delete и Update точно таким же образом.

Листинг 3.4. Реализация интерфейсов сервисов

public class CustomerService : ICustomerService {

private readonly MyDatabaseDataContext _database;

public CustomerService(MyDatabaseDataContext db)

{

if (db == null)

throw new ArgumentNullException("db");

_database = db;

}

public ICustomer Create(string name, string phone, string address)

{

if (String.IsNullOrEmpty(name))

throw new ArgumentNullException("name");

Customer customer = new Customer

{

CustomerId = Guid.NewGuid,

Address = address,

Phone = phone,

Name = name

};

_database.Customers.InsertOnSubmit(customer);

return customer;

}

public void Delete(ICustomer customer)

{

if (customer == null)

throw new ArgumentNullException("customer");

_database.Customers.DeleteOnSubmit((Customer)customer);

}

public void Update(ICustomer customer, string name,

string phone, string address)

{

if (customer == null)

throw new ArgumentNullException("customer");

if (String.IsNullOrEmpty(name))

throw new ArgumentNullException("name");

customer.Name = name;

customer.Phone = phone;

customer.Address = address;

}

}

Нетрудно заметить, что наш код зависит от определенного типа контекста данных. Следовательно, при использовании этого кода мы вынуждены будем передавать созданный контекст базы данных, а следовательно, будем привязаны к нему. Для того чтобы избавиться от этой зависимости, создадим новый элемент, который будет возвращать необходимый нам контекст базы данных.

public class UnitOfWork : IDisposable {

private readonly MyDatabaseDataContext _database;

public MyDatabaseDataContext DataContext {

get

{

return _database;

}

}

private bool _disposed;

public UnitOfWork

{

_database = new MyDatabaseDataContext;

}

public void Commit

{

_database.SubmitChanges;

}

public void Dispose

  • Читать дальше
  • 1
  • ...
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • ...

UR.ANUS - русскоязычная библиотека для чтения онлайн. Здесь удобно открывать книги с телефона и ПК, возвращаться к сохраненной странице и держать любимые произведения под рукой. Материалы добавляются пользователями; если считаете, что ваши права нарушены, воспользуйтесь формой обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • support@anus.bid