Skip to main content

Service : Service shouldn't have an SQL Transaction

Medium
DDD

Service shouldn't have an SQL Transaction.

Using a technical object like a SQL a transaction is a bad smell. SQL transaction should be in a repository.

Classes which names ends Serviceshould not have any variable or method variable/parameters types which contains "SQL", "sql", or "BeginTransaction".

Examples

Example 1:

Negative

Incorrect implementation that violates the practice.

using Microsoft.Data.SqlClient;

namespace Practices.DDD.Service.SQLTransaction
{
public class OrderService
{
private readonly OrderRepository _orderRepository;

public OrderService(OrderRepository orderRepository)
{
_orderRepository = orderRepository;
}

public void UpdateData(Order order)
{
//Having SQL References in a service is bad smell
using (var connection = new SqlConnection())
{
//Having Database Transaction is a red flag
using (var transac = connection.BeginTransaction())
{
//Process Order
_orderRepository.UpdateData(order, transac);
//Process Order with a second method
_orderRepository.UpdateLastUpdate(order, transac);
}
}
}

public void UpdateDataAndLastUpdate(Order order)
{
//Process Order
_orderRepository.UpdateDataAndLastUpdate(order);
}

}
}