Файл: Связи и массовых коммуникаций российской федерации федеральное государственное.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 Correspondences { get; set; }

public DbSet Senders { get; set; }

public DbSet Recipients { get; set; }

public DbSet Departments { get; set; }

public DbSet Attachments { get; set; }

public DbSet RegistrationCards { get; set; }

public YourDbContext(DbContextOptions options)

: 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, которые представляют коллекции сущностей в базе данных. Метод OnModelCreating используется для настройки модели данных, включая конфигурацию сущностей и их отношений с помощью Fluent API.

Регистрация класса контекста

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 =>

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(nullable: false),

// Определение остальных столбцов

},

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 GetAll();

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 GetAll()

{

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();

}


Выводы

В данной курсовой работе разработал слой домена микросервиса, реализующего прием исходящей корреспонденции.

Список использованных источников

  1. Документация по C# - https://docs.microsoft.com/ru-ru/dotnet/csharp/

  2. Объектно-ориентированное программирование (C#) - https://docs.microsoft.com/ru-ru/dotnet/csharp/fundamentals/tutorials/oop

  3. Учебник. Создание веб-API с помощью ASP.NET Core - https://docs.microsoft.com/ru-ru/aspnet/core/tutorials/first-web-api?view=aspnetcore-6.0&tabs=visual-studio

  4. Web-API - https://metanit.com/sharp/aspnet5/23.1.php
  5. Документация по веб-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
  6. Entity Framework Core - https://docs.microsoft.com/ru-ru/ef/core/

  7. Сохранение связанных данных - https://docs.microsoft.com/ru-ru/ef/core/saving/related-data

  8. Отключенные сущности - https://docs.microsoft.com/ru-ru/ef/core/saving/disconnected-entities

  9. Руководство по Entity Framework Core - https://metanit.com/sharp/entityframeworkcore/