Файл: Связи и массовых коммуникаций российской федерации федеральное государственное.docx
Добавлен: 08.11.2023
Просмотров: 34
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Также в классе определены геттеры и сеттеры для каждого атрибута, которые позволяют получать и устанавливать значения атрибутов объекта "Регистрационная карточка".
Класс Приложение представляет дополнительные документы или файлы, которые могут быть прикреплены к корреспонденции. У него есть уникальный идентификатор (id), название и описание приложения. Все атрибуты являются приватными. Класс имеет методы доступа (getter) и установки (setter) для атрибутов название и описание. Методы доступа обеспечивают безопасный доступ к приватным атрибутам.
Класс Подразделение представляет отдел, подразделение или организационную единицу, к которой относятся отправители и адресаты. У него есть уникальный идентификатор, название и информация о руководителе подразделения. Все атрибуты являются приватными. Класс имеет методы доступа (getter) и установки (setter) для атрибутов название и руководитель. Методы доступа обеспечивают безопасный доступ к приватным атрибутам.
Класс Адресат представляет адресата корреспонденции. У него есть уникальный идентификатор, имя, должность, подразделение и контактная информация. Они все являются приватными атрибутами. Класс имеет методы доступа (getter) и установки (setter) для всех атрибутов, кроме id. Методы доступа обеспечивают безопасный доступ к приватным атрибутам.
Класс Отправитель представляет отправителя корреспонденции. У него есть уникальный идентификатор, имя, должность, подразделение и контактная информация. Они все являются приватными атрибутами. Класс имеет методы доступа (getter) и установки (setter) для всех атрибутов, кроме id. Методы доступа обеспечивают безопасный доступ к приватным атрибутам.
В этой диаграмме класс "Корреспонденция" содержит приватные атрибуты id, date, topic, text, recipient и attachments. Класс также предоставляет публичные методы для доступа к каждому из этих атрибутов: setId, getId, setDate, getDate, setTopic, getTopic, setText, getText, setRecipient, getRecipient, setAttachments и getAttachments. Класс "Корреспонденция" также связан с классом "Адресат", который представляет получателя корреспонденции, с помощью атрибута recipient.
Рисунок 3. Диаграмма классов.
Спецификации программных классов
Спецификации классов определяют проект класса и содержат информации об имени класса, скалярных свойствах (включая типы скалярных свойств), свойствах навигации (включая кратность). Спецификация классов является основой для отображения проекта классов в исходный код на C#. Со спецификацией классов вы можете ознакомится ниже:
"Корреспонденция" Correspondence | ||
Скалярные свойства | ||
Имя | Тип | Комментарий |
id | int | уникальный идентификатор корреспонденции |
отправитель | object | Объект класса "Отправитель" |
адресат | object | Объект класса "Адресат" |
тема | string | тема корреспонденции |
текст | string | текст корреспонденции |
приложение | array | Массив объектов класса "Приложение" |
"Отправитель" | ||
Скалярные свойства | ||
Имя | Тип | Комментарий |
id | int | уникальный идентификатор отправителя |
имя | string | имя отправителя |
должность | string | должность отправителя |
подразделение | object | Объект класса "Подразделение" |
Контактная информация | string | контактная информация отправителя |
"Адресат" | ||
Скалярные свойства | ||
Имя | Тип | Комментарий |
id | int | уникальный идентификатор адресата |
имя | string | имя отправителя |
должность | string | должность отправителя |
подразделение | object | Объект класса "Подразделение" |
Контактная информация | string | контактная информация отправителя |
"Подразделение" | ||
Скалярные свойства | ||
Имя | Тип | Комментарий |
id | int | уникальный идентификатор подразделения |
название | string | название подразделения |
руководитель | string | Информация о руководителе подразделения |
"Приложение" | ||
Скалярные свойства | ||
Имя | Тип | Комментарий |
id | int | уникальный идентификатор приложения |
название | string | название приложения |
описание | string | описание приложения |
"Регистрационная карточка" | ||
Скалярные свойства | ||
Имя | Тип | Комментарий |
id | int | уникальный идентификатор регистрационной карточки |
id | int | идентификатор связанной корреспонденции |
Дата регистрации | date | дата регистрации карточки |
Краткое содержание | string | краткое содержание карточки |
Дата получения | date | дата получения корреспонденции |
Статус корреспонденции | string | Статус корреспонденции |
Ответственный исполнитель | string | информация об ответственном исполнителе |
Исходный код классов предметной области
Исходный код класса предметной области «Регистрация исходящей корреспонденции» изображен на рисунке 4.
Рисунок 4. Дерево классов
Класс контекста
Объектно-реляционное преобразование (Object-Relational Mapping, ORM) — это подход, который позволяет связать объектную модель данных приложения с реляционной базой данных. Он обеспечивает прозрачное взаимодействие между объектами в приложении и таблицами в базе данных, позволяя выполнять операции CRUD (создание, чтение, обновление, удаление) с данными.
Одним из популярных инструментов ORM для работы с базами данных в .NET является Entity Framework Core. Он предоставляет набор инструментов и функциональность для создания и управления моделями данных, а также для выполнения запросов к базе данных.
Ниже приведен пример полного кода класса контекста, производного от класса DbContext, который использует Entity Framework Core:
using Microsoft.EntityFrameworkCore;
namespace YourApplication.Infrastructure
{
public class YourDbContext : DbContext
{
// DbSet'ы для сущностей
public DbSet
public DbSet
public DbSet
public DbSet
public DbSet
public DbSet
public YourDbContext(DbContextOptions
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// Определение конфигурации сущностей и их отношений (если требуется)
modelBuilder.ApplyConfiguration(new CorrespondenceConfiguration());
modelBuilder.ApplyConfiguration(new SenderConfiguration());
modelBuilder.ApplyConfiguration(new RecipientConfiguration());
modelBuilder.ApplyConfiguration(new DepartmentConfiguration());
modelBuilder.ApplyConfiguration(new AttachmentConfiguration());
modelBuilder.ApplyConfiguration(new RegistrationCardConfiguration());
// Дополнительная конфигурация модели (если требуется)
// ...
}
}
}
В приведенном примере класс контекста YourDbContext наследуется от класса DbContext. Внутри него определены свойства типа DbSet
Регистрация класса контекста
using CourseRegistration.Infrastructure;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using System.Text.Json.Serialization;
using CourseRegistration.Infrastructure.InterfaceRepository;
using CourseRegistration.Infrastructure.Repository;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
builder.Services.AddScoped
builder.Services.AddScoped
builder.Services.AddScoped
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddDbContext
options.UseNpgsql(builder.Configuration.GetConnectionString("CourseRegistrationDB")));
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment()) {
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
Код файлов миграции
Код файла миграции зависит от используемого инструмента для управления миграциями базы данных вместе с Entity Framework Core. Ниже приведен пример кода файла миграции с использованием пакета Microsoft.EntityFrameworkCore.Tools:
csharp
Copy code
using Microsoft.EntityFrameworkCore.Migrations;
namespace YourApplication.Infrastructure.Migrations
{
public partial class InitialMigration : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
// Создание таблиц и определение столбцов
migrationBuilder.CreateTable(
name: "Correspondences",
columns: table => new
{
Id = table.Column
// Определение остальных столбцов
},
constraints: table =>
{
// Определение ограничений и связей (если требуется)
// table.ForeignKey(...);
});
// Дополнительные операции миграции (если требуется)
// ...
// Создание индексов (если требуется)
// migrationBuilder.CreateIndex(...);
}
protected override void Down(MigrationBuilder migrationBuilder)
{
// Отмена изменений, сделанных в методе Up
migrationBuilder.DropTable(name: "Correspondences");
// Дополнительные операции отмены миграции (если требуется)
// ...
}
}
}
В приведенном примере файл миграции наследуется от класса Migration из пространства имен Microsoft.EntityFrameworkCore.Migrations. В методе Up описываются операции, которые будут выполнены при применении миграции, такие как создание таблиц, определение столбцов, ограничений и связей. Метод Down определяет операции, которые будут выполнены при откате миграции, включая удаление созданных ранее объектов.
Репозиторий
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.EntityFrameworkCore;
namespace RegOutCor.Domain.Repositories
{
public interface ICorrespondenceRepository
{
Correspondence GetById(int id);
IEnumerable
void Add(Correspondence correspondence);
void Update(Correspondence correspondence);
void Delete(int id);
}
public class CorrespondenceRepository : ICorrespondenceRepository
{
private readonly YourDbContext _dbContext;
public CorrespondenceRepository(YourDbContext dbContext)
{
_dbContext = dbContext;
}
public Correspondence GetById(int id)
{
return _dbContext.Correspondences.Find(id);
}
public IEnumerable
{
return _dbContext.Correspondences.ToList();
}
public void Add(Correspondence correspondence)
{
_dbContext.Correspondences.Add(correspondence);
_dbContext.SaveChanges();
}
public void Update(Correspondence correspondence)
{
_dbContext.Entry(correspondence).State = EntityState.Modified;
_dbContext.SaveChanges();
}
public void Delete(int id)
{
var correspondence = _dbContext.Correspondences.Find(id);
if (correspondence != null)
{
_dbContext.Correspondences.Remove(correspondence);
_dbContext.SaveChanges();
}
}
}
}
Контроллер Web API
Архитектурный стиль RESTful (Representational State Transfer) представляет собой подход к проектированию распределенных систем, основанный на использовании простых и единообразных протоколов HTTP для взаимодействия между клиентом и сервером. RESTful API предоставляет доступ к ресурсам и позволяет выполнять операции CRUD (Create, Read, Update, Delete) над этими ресурсами.
Ниже приведен пример исходного кода контроллера Web API, реализующего операции CRUD для ресурса "Correspondence":
csharp
Copy code
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using YourApplication.Domain.Repositories;
using YourApplication.Models;
namespace YourApplication.Controllers
{
[ApiController]
[Route("api/correspondences")]
public class CorrespondencesController : ControllerBase
{
private readonly ICorrespondenceRepository _correspondenceRepository;
public CorrespondencesController(ICorrespondenceRepository correspondenceRepository)
{
_correspondenceRepository = correspondenceRepository;
}
[HttpGet]
public IActionResult Get()
{
var correspondences = _correspondenceRepository.GetAll();
return Ok(correspondences);
}
[HttpGet("{id}")]
public IActionResult GetById(int id)
{
var correspondence = _correspondenceRepository.GetById(id);
if (correspondence == null)
{
return NotFound();
}
return Ok(correspondence);
}
[HttpPost]
public IActionResult Create(Correspondence correspondence)
{
_correspondenceRepository.Add(correspondence);
return CreatedAtAction(nameof(GetById), new { id = correspondence.Id }, correspondence);
}
[HttpPut("{id}")]
public IActionResult Update(int id, Correspondence correspondence)
{
if (id != correspondence.Id)
{
return BadRequest();
}
Выводы
В данной курсовой работе разработал слой домена микросервиса, реализующего прием исходящей корреспонденции.
Список использованных источников
-
Документация по C# - https://docs.microsoft.com/ru-ru/dotnet/csharp/ -
Объектно-ориентированное программирование (C#) - https://docs.microsoft.com/ru-ru/dotnet/csharp/fundamentals/tutorials/oop -
Учебник. Создание веб-API с помощью ASP.NET Core - https://docs.microsoft.com/ru-ru/aspnet/core/tutorials/first-web-api?view=aspnetcore-6.0&tabs=visual-studio -
Web-API - https://metanit.com/sharp/aspnet5/23.1.php - Документация по веб-API ASP.NET Core с использованием Swagger (OpenAPI) - https://docs.microsoft.com/ru-ru/aspnet/core/tutorials/web-api-help-pages-using-swagger?view=aspnetcore-6.0
-
Entity Framework Core - https://docs.microsoft.com/ru-ru/ef/core/
-
Сохранение связанных данных - https://docs.microsoft.com/ru-ru/ef/core/saving/related-data
-
Отключенные сущности - https://docs.microsoft.com/ru-ru/ef/core/saving/disconnected-entities
-
Руководство по Entity Framework Core - https://metanit.com/sharp/entityframeworkcore/