当前位置: 首页 > news >正文

网站标题和关键词一样网页设计需要学什么软件有哪些

网站标题和关键词一样,网页设计需要学什么软件有哪些,企业网站建设计入什么科目,厦门广告公司网站建设目录 .NET桌面应用架构Demo与实战|WPFMVVMEFCoreIOCDICode FirstAutoPapper技术栈简述项目地址#xff1a;功能展示项目结构项目引用1. 新建模型2. Data层#xff0c;依赖EF Core#xff0c;实现数据库增删改查3. Bussiness层#xff0c;实现具体的业务逻辑4. Service层MVVMEFCoreIOCDICode FirstAutoPapper技术栈简述项目地址功能展示项目结构项目引用1. 新建模型2. Data层依赖EF Core实现数据库增删改查3. Bussiness层实现具体的业务逻辑4. Service层业务逻辑封装5. UI层用户界面初始化应用程序的服务和组件 主要组件**IHost**主机构建器配置通过AddConfiguration方法加载appsettings.json和环境变量。注册对象映射数据库配置注册应用程序服务注册视图模型注册视图定义AutoMapper映射规则应用程序启动与关闭 示例UIViewModelM界面交互处理 参考 .NET桌面应用架构Demo与实战|WPFMVVMEFCoreIOCDICode FirstAutoPapper 该应用程序旨在高效地管理日常工作中所需的AI Prompt支持新增、编辑、删除、快速复制以及查询等功能。然而这些功能本身并不是本文讨论的重点更关注的是背后的技术实现与架构设计思路。功能灵感来自ChatHub - GPT-4o, Claude 3.5, Gemini 1.5 side by side 技术栈简述 MVVM设计模式 将应用程序分为三个核心组件模型Model、视图View和视图模型ViewModel。这种分离关注点的方法提高了应用程序的可维护性和可测试性。EFCore 一个轻量级的、可扩展的ORM对象关系映射框架用于.NET平台。它允许使用C#代码来处理数据库操作而不是直接编写SQL语句。Code First模式EFCore支持Code First开发模式开发者可以直接通过C#类定义来创建数据库模型然后EFCore会自动生成数据库架构。IOC 一种设计原则它倒置了传统程序设计中的控制流使得高层模块不依赖于低层模块两者都依赖于抽象。DI 实现IOC的一种方式它通过外部注入依赖来实现模块间的解耦。AutoMapper是一个对象到对象的映射库它可以帮助开发者自动转换不同类型的对象例如将数据库实体Model映射到视图模型ViewModel。 总体来讲EFCore简化了数据库操作而IOC和DI则提高了应用程序的可维护性和可测试性AutoMapper的加入进一步减少了对象映射的复杂性。使用这些技术栈的组合使得AI Prompt管理应用的开发更加高效、灵活和可靠。 项目地址 https://github.com/Nita121388/NitasDemo/tree/main/08WPFArctitectureDemo 功能展示 软件启动后会展示一个列表其中包含了所有的AI PromptAI Prompt。用户可以通过以下操作来管理这些Prompt 查看所有Prompt软件启动时用户将看到一个包含所有AIPrompt的列表方便快速浏览。新增Prompt用户可以通过点击“新增”按钮来添加新的AI Prompt。点击后会弹出一个编辑界面用户可以在这里输入标题和内容完成新Prompt的创建。编辑Prompt在Prompt列表中用户可以通过点击“编辑”按钮来修改现有的AIPrompt。编辑界面会加载当前Prompt的内容用户可以对其进行修改。删除Prompt用户可以通过点击“删除”按钮来移除不再需要的AIPrompt。使用Prompt用户可以通过点击“使用”按钮来将选中的AI Prompt复制到系统剪贴板用户就可以将Prompt粘贴到任何需要的AI对话系统中以便快速输入或引用。导出Prompt用户可以通过点击“导出”按钮来保存当前所有的AI Prompt到一个Json文件中。这个操作允许用户将Prompt列表导出为JSON文件方便备份或在其他设备上导入。导入Prompt用户可以通过点击“导入”按钮来从文件中加载AI Prompt。点击后会弹出一个文件选择对话框用户可以选择包含Prompt信息的文件进行导入。导入成功后软件会将文件中的Prompt添加到现有的Prompt列表中。 项目结构 应用分层架构通过将应用程序划分为UI层、服务层、业务逻辑层、数据访问层和领域模型层实现了关注点分离。每个层级都有明确的职责UI层负责用户界面服务层提供业务操作接口业务逻辑层处理具体的业务需求数据访问层处理数据库交互而领域模型层则定义了业务实体。 WFArchitectureDemo │ ├───────►UI │ │ │ ├─────►Common │ │ Helper │ │ HostBuilders //主机构建器HostBuilder 配置应用程序的各种设置│ ├─────►Converters │ │ PercentageConverter.cs │ ├─────►ViewModels │ ├─────►Views │ ├─────►App.xaml │ │ App.xaml.cs //依赖注入与配置管理 │ ├─────►appsettings.json //数据库设置 │ └─────►MainWindow.xaml //启动界面 │ ├────────►Service │ │ │ ├─────►IServices //服务接口 │ │ IPromptService.cs │ ├─────►Services //服务实现 │ │ PromptService.cs │ └─────►Result.cs │ ├────────►Business │ │ │ ├────►IManager //业务逻辑接口 │ │ IPromptManager.cs │ │ │ ├────►Manager //具体的业务逻辑 │ │ PromptManager.cs │ │ │ └────►DTO //数据传输对象 │ PromptDTO.cs │ PromptUsageDTO.cs │ ├────────►Data //负责与数据库的直接交互包括CRUD操作 │ │ │ ├────►RepositoryFactory │ │ RepositoryFactory.cs │ │ │ ├────►IRepository //仓储模式、CURD接口 │ │ IRepository.cs│ │ IPromptRepository.cs │ │ IPromptUsageRepository.cs │ │ │ ├────►Repository //仓储模式、CURD实现 │ │ PromptRepository.cs │ │ PromptUsageRepository.cs │ │ │ ├────►DatabaseContexts //EF Core的数据库上下文 │ │ DbContextFactory.cs │ │ PromptDbContext.cs │ │ │ └────►Migrations //数据迁移文件管理数据库变化 │ └────────►Domainn //领域模型 │ └────►Models Prompt.cs PromptUsage.cs 项目引用 CommunityToolkit.MvvmMicrosoft.Xaml.Behaviors.WpfAutoMapperMicrosoft.Extensions.ConfigurationMicrosoft.Extensions.DependencyInjectionMicrosoft.Extensions.HostingMicrosoft.EntityFrameworkCoreMicrosoft.EntityFrameworkCore.SqliteMicrosoft.EntityFrameworkCore.ToolsMicrosoft.EntityFrameworkCore.Design 以下为该项目一步一步一层层的实现大致过程和概述。 1. 新建模型 public class Prompt {public long ID { get; set; }public string Title { get; set; }public string Content { get; set; }public bool IsDelete { get; set; }public DateTime CreateDateTime { get; set; }public DateTime UpdateDateTime { get; set; }public ICollectionPromptUsage PromptUsages { get; set; } new ListPromptUsage(); }public class PromptUsage {public long ID { get; set; }public long PromptID { get; set; }public DateTime CreateDateTime { get; set; }public Prompt Prompt { get; set; } } 2. Data层依赖EF Core实现数据库增删改查 该层引用 Microsoft.EntityFrameworkCoreMicrosoft.EntityFrameworkCore.SqliteMicrosoft.EntityFrameworkCore.ToolsMicrosoft.EntityFrameworkCore.Design 定义仓储接口IRepository public interface IRepositoryT {T Add(T entity);void Delete(long id);void Update(T entity);ListT Get();ListT Select(string filterSql,string orderBySql);T Get(long id);ListT GetByForeignKey(long id); }IPromptRepository和IPromptUsageRepository都继承自IRepository 接口在由PromptRepository和PromptUsageRepositoryPromptRepository和PromptUsageRepository依赖DbContextFactory提供的数据库上下文具体实现增删改查PromptDbContext是构建数据访问层的核心继承DbContext使用 EF Core 来定义数据库上下文、配置实体和它们之间的关系。 public class PromptDbContext : DbContext{public DbSetPrompt Prompts { get; set; }public DbSetPromptUsage PromptUsages { get; set; }public PromptDbContext(DbContextOptions options) : base(options){ } //设计时不能包含此行内容 protected override void OnModelCreating(ModelBuilder modelBuilder){// 配置 Prompt 实体modelBuilder.EntityPrompt(entity {entity.HasKey(e e.ID);entity.HasMany(e e.PromptUsages).WithOne(u u.Prompt).HasForeignKey(u u.PromptID);});// 配置 PromptUsage 实体modelBuilder.EntityPromptUsage(entity {entity.HasKey(e e.ID);});}}Code First模式生成迁移文件创建数据库 Microsoft.EntityFrameworkCore.Tools是一个包含了用于创建、更新和管理数据库迁移的命令行工具的程序包。这些工具允许开发者在不直接修改数据库架构的情况下通过代码来跟踪和更新数据库的变化。这些迁移可以应用于不同的数据库环境从而帮助实现数据库的持续集成和持续部署。Microsoft.EntityFrameworkCore.Design包则主要用于在设计时为EF Core提供支持和功能包括生成代码和模型等。虽然它本身不直接提供迁移功能但它是迁移功能所依赖的一个重要组件。 在Vistual Studio →工具→NuGet包管理器→程序包管理器控制台执行以下命令 PM Add-Migration Init Build started... Build succeeded. To undo this action, use Remove-Migration. PM update-database Build started... Build succeeded. Applying migration 20241108031752_Init. Done. PM 然后可以看到项目中新增了文件夹Migrations其包含20241114045010_init.cs和PromptDbContextModelSnapshot 20241114045010_init.cs包含了一个迁移类它定义了数据库架构的变化。这个类包含了Up和Down方法分别用于应用迁移和撤销迁移。PromptDbContextModelSnapshot它包含了当前数据库上下文的模型快照。这个快照用于在添加新的迁移时比较模型的变化确保迁移的准确性。 3. Bussiness层实现具体的业务逻辑 Bussiness层调用Data层实现具体的业务逻辑,要依旧这层依赖倒置原则Dependency Inversion Principle, DIP——高层模块不应该依赖于低层模块二者都应该依赖于其抽象抽象不应该依赖于细节细节应该依赖于抽象。IManager中是对外提供的接口Manager中是具体的实现。 4. Service层业务逻辑封装 Service层调用Bussiness层 可以进一步封装和抽象业务逻辑使其更加模块化和可重用。 5. UI层用户界面 初始化应用程序的服务和组件 从App.xaml.cs开始这是WPF应用程序的入口点。创建了一个继承自Application的App类并在其中初始化应用程序的服务和组件处理启动和退出事件并确保数据库的迁移和主窗口的显示。 主要组件 IServiceProvider提供对应用程序服务的访问。IHost.NET Core的主机构建器用于配置和启动应用程序。 IHost主机构建器 定义一个CreateHostBuilder方法它使用Host.CreateDefaultBuilder来设置主机构建器并通过一系列静态类来扩展IHostBuilder来简化主机构建器的配置以便在应用程序启动时注册所需的服务。 public static IHostBuilder CreateHostBuilder(string[] args null){return Host.CreateDefaultBuilder(args).AddConfiguration().AddAutoMapper().AddDbContext().AddServices().AddViewModels().AddViews();}通过模块化配置将不同的功能如数据库访问、业务逻辑、视图模型等分离到不同的类中从而提高代码的可读性和可维护性。添加了以下组件 配置通过AddConfiguration方法加载appsettings.json和环境变量。 public static IHostBuilder AddConfiguration(this IHostBuilder host){host.ConfigureAppConfiguration(c {c.AddJsonFile(appsettings.json);c.AddEnvironmentVariables();});return host;}注册对象映射 在代码中涉及将DTO对象转为ViewModel此处采用AutoMapper来实现便捷的映射 public static IHostBuilder AddAutoMapper(this IHostBuilder host){host.ConfigureServices((context, services) {services.AddAutoMapper(typeof(App));});return host;}数据库配置 通过AddDbContext方法配置Entity Framework Core数据库上下文 public static IHostBuilder AddDbContext(this IHostBuilder host) {host.ConfigureServices((context, services) {string connectionString context.Configuration.GetConnectionString(sqlite);ActionDbContextOptionsBuilder configureDbContext o o.UseSqlite(connectionString);// 注册 DbContextservices.AddDbContextPromptDbContext(configureDbContext);services.AddSingletonDbContextFactory(sp new DbContextFactory(configureDbContext));services.AddSingletonRepositoryFactory(sp new RepositoryFactory(configureDbContext));});return host; }注册应用程序服务 public static IHostBuilder AddServices(this IHostBuilder host) {host.ConfigureServices(services {// 注册 IPromptManager 和 IPromptServiceservices.AddSingletonIPromptManager, PromptManager(sp {var repositoryFactory sp.GetRequiredServiceRepositoryFactory();return new PromptManager(repositoryFactory);});services.AddSingletonIPromptService, PromptService(sp {var promptManager sp.GetRequiredServiceIPromptManager();return new PromptService(promptManager);});});return host; }使用 private IPromptService _promptService;private IMapper _mapper;public PromptsViewModel(){_promptService App.Current.Services.GetRequiredServiceIPromptService();_mapper App.Current.Services.GetRequiredServiceIMapper();}注册视图模型 public static IHostBuilder AddViewModels(this IHostBuilder host){host.ConfigureServices(services {services.AddTransientPromptsViewModel();});return host;}使用 public MainWindow(){InitializeComponent(); ViewModel App.Current.Services.GetRequiredServicePromptsViewModel();ViewModel.Refresh();DataContext ViewModel;}注册视图 public static IHostBuilder AddViews(this IHostBuilder host) {host.ConfigureServices(services {services.AddSingletonMainWindow();});return host; }使用 Window window _host.Services.GetRequiredServiceMainWindow();window.Show();定义AutoMapper映射规则 AutoMapper用于简化对象之间的映射。创建了一个MappingProfile类来定义映射规则。 public class MappingProfile : Profile {public MappingProfile(){// PromptUsageViewModel PromptUsageDTOCreateMapPromptUsageViewModel, PromptUsageDTO();//PromptUsageDTO PromptUsageViewModelCreateMapPromptUsageDTO, PromptUsageViewModel();// PromptViewModel PromptDTOCreateMapPromptViewModel, PromptDTO().ForMember(dest dest.Usages, opt opt.MapFrom(src src.Usages.ToList()));CreateMapPromptDTO, PromptViewModel().ForMember(dest dest.Usages,opt opt.MapFrom(src src.Usages.ToList()));} }使用示例 var promptViewModel _mapper.MapPromptViewModel(promptDTO);应用程序启动与关闭 在OnStartup方法中启动主机这会触发所有服务的注册和初始化然后执行数据库迁移最后显示主窗口。在OnExit方法中停止并释放主机资源。 /// summary /// 在应用程序启动时执行的操作。 /// /summary protected override void OnStartup(StartupEventArgs e) {base.OnStartup(e); // 启动主机这将触发所有服务的注册和初始化。_host?.Start();// 获取DbContextFactory服务的实例用于创建数据库上下文。DbContextFactory contextFactory _host.Services.GetRequiredServiceDbContextFactory();// 使用DbContextFactory创建数据库上下文实例并应用所有未应用的迁移。// 这确保了数据库结构是最新的以匹配应用程序的数据模型。using (var context contextFactory.CreateDbContext()){context.Database.Migrate();}// 获取MainWindow服务的实例Window window _host.Services.GetRequiredServiceMainWindow();// 显示主窗口window.Show(); }protected override async void OnExit(ExitEventArgs e) {// 等待_host对象的StopAsync方法完成这个方法应该是停止一些后台服务的操作。await _host.StopAsync();// 释放_host对象所占用的资源。_host.Dispose();// 调用基类的OnExit方法确保基类的退出逻辑也能被执行。base.OnExit(e); }示例 /// summary /// Interaction logic for App.xaml /// /summary public partial class App : Application {public new static App Current (App)Application.Current;public IServiceProvider Services { get; }private readonly IHost _host;public App(){_host CreateHostBuilder().Build();Services _host.Services;}public static IHostBuilder CreateHostBuilder(string[] args null){return Host.CreateDefaultBuilder(args).AddConfiguration().AddAutoMapper().AddDbContext().AddServices().AddViewModels().AddViews();}protected override void OnStartup(StartupEventArgs e){base.OnStartup(e);_host?.Start();DbContextFactory contextFactory _host.Services.GetRequiredServiceDbContextFactory();using (var context contextFactory.CreateDbContext()){context.Database.Migrate();}Window window _host.Services.GetRequiredServiceMainWindow();window.Show();}protected override async void OnExit(ExitEventArgs e){await _host.StopAsync();_host.Dispose();base.OnExit(e);} }UIViewModelM界面交互处理 在用户界面层UI Layer中采用了CommunityToolkit.Mvvm库来实现MVVMModel-View-ViewModel设计模式。通过MVVM模式实现了命令绑定和数据绑定使得用户界面与业务逻辑之间的交互更加清晰和高效。因为此处不是本文重点所以不详细介绍啦。 参考 实体框架文档中心 | Microsoft Learnhttps://www.youtube.com/playlist?listPLA8ZIAm2I03jSfo18F7Y65XusYzDusYu5Construction — AutoMapper documentationSingletonSean/SimpleTrader全栈 WPF MVVM 交易应用程序。 — SingletonSean/SimpleTrader: A full stack WPF MVVM trading application.xtenzQ/WPF-MVVM-EFC-Example: MVVM (WPF) application built with EFCore, Abstract Factory pattern and dependency injection (Microsoft Unity) 平平无奇的代码小白如有问题请多指正
http://www.dnsts.com.cn/news/17532.html

相关文章:

  • 陕西示范校建设专题网站广西营销型网站公司
  • 网站网站制作多少钱网站推广产品怎么做
  • 网站设计与制作的基本步骤滨州做企业网站
  • 搭建公司网站多少钱品牌网首页
  • 嘉兴备案网站建设东莞手机网站制作
  • 网站建设营销型网站概念网站页面设计好了后台如何添加
  • 杂谈发现一只网站是你们谁做的赣州网站建设平台
  • 做网站的框架有在线crm系统是啥
  • 怎么做自己的网站主页创建了网站
  • 昆明网站设计都需要设计什么石家庄网站制作招聘
  • 金华app网站开发动画设计专业就业前景怎么样
  • 外贸网站运营工作内容html做网页
  • 广元网站建设如何新建一个网站
  • 建立网站的要素移动端网站如何做导出功能吗
  • 网站建设合同管辖地百度竞价包年推广公司
  • 做平面设计在什么网站能挣钱邵武网站建设wzjseo
  • 单位网站建设的报告海淀教育互动平台网站建设
  • 国产做性直播视频网站ug wordpress
  • 网站制作公司前景软件最全的网站
  • 深圳网站 商城制作网页设计与制作考试试题及答案06386
  • 汕头网站建设托管wordpress主题 表白
  • 公园网站建设深圳宝安建设工程交易中心
  • 企业网站源码asp济宁网站建设 田振
  • 有没有做网站兼职淄博手机网站
  • 网站备案 接入商sem和seo的关系
  • 网站关键词设定江门加盟网站建设
  • 做网站公司郑州郑州的网站建设公司排名单页网站seo如何优化
  • 软件开发工具包英文seo评测论坛
  • 成都网站建设公司创新互联开阳县城乡建设局网站
  • 做公众号app网站app吗阿里云建站的优缺点