本篇文章主要分享本人对MVVM,三层架构与ORM框架的一些心得,如果各路大神有其他看法可以在评论区评论,欢迎各位提出指导意见。废话不多说直接上图上代码。
这个软件是以学生信息管理系统为例子,UI 层提供对学生信息的增加,删除,修改,查询功能,对应到底层对数据库实现增删改查的操作.下面我就以三层架构的思维从上往下一一描述。
1.UI 层
这里采用了MVVM 的设计架构,目的是让视图代码和数据模型降低耦合,实现属性,方法的绑定。在控件上我稍微使用了控件模板和样式。
(1)View 代码:
PS:在界面底下构造需要把Viewmodel 的数据绑定到前端中,可以组合引用
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using MVVMTest.ViewModel;
using MVVMTest.View;
namespace MVVMTest.View
{
///
/// MainWindow.xaml 的交互逻辑
///
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = MainViewModel.Instance;
}
}
}
(2)ViewModel 代码(这里跟事件的绑定我使用了Prism 框架,因为不想自己造轮子,其他的框架也是可以的,这块业务我使用了单例去设计)
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using MVVMTest.Model;
using Prism.Commands;
namespace MVVMTest.ViewModel
{
public class MainViewModel
{
static MainViewModel()
{
}
private MainViewModel()
{
IniViewModel();
BusinessLogic.BusinessLogic.Instance.SetRequest(studentModel.GetType());
}
public static MainViewModel Instance { get; } = new MainViewModel(); //这里使用单例去做业务处理
//控件命令列表
// Prism 框架下的事件绑定,可带参和不带参
private DelegateCommand _buttonQueryCommand;
public DelegateCommand buttonQueryCommand =>
_buttonQueryCommand ?? (_buttonQueryCommand = new DelegateCommand(ViewQuery));
private DelegateCommand _buttonInsertCommand;
public DelegateCommand buttonInsertCommand =>
_buttonInsertCommand ?? (_buttonInsertCommand = new DelegateCommand(ViewInsert));
private DelegateCommand _buttonUpdataCommand;
public DelegateCommand buttonUpdataCommand =>
_buttonUpdataCommand ?? (_buttonUpdataCommand = new DelegateCommand(ViewUpdata));
private DelegateCommand _buttonDeleteCommand;
public DelegateCommand buttonDeleteCommand =>
_buttonDeleteCommand ?? (_buttonDeleteCommand = new DelegateCommand(ViewDelete));
private DelegateCommand _selectItemChangedCommand;
public DelegateCommand selectItemChangedCommand =>
_selectItemChangedCommand ?? (_selectItemChangedCommand = new DelegateCommand(GetModelObject));
public StudentModel studentModel { get; set; }
private StudentModel selectStudentModel = new StudentModel();
private void IniViewModel()
{
studentModel = new StudentModel();
}
private void ViewQuery()
{
studentModel.StudentList = BusinessLogic.BusinessLogic.Instance.QueryData();
}
private void ViewInsert()
{
BusinessLogic.BusinessLogic.Instance.InsertData(studentModel);
}
private void ViewUpdata()
{
selectStudentModel.Name = studentModel.Name;
selectStudentModel.Year = studentModel.Year;
selectStudentModel.Address = studentModel.Address;
selectStudentModel.PhoneNumber = studentModel.PhoneNumber;
BusinessLogic.BusinessLogic.Instance.UpdataData(selectStudentModel);
}
private void ViewDelete()
{
BusinessLogic.BusinessLogic.Instance.DeleteData(selectStudentModel);
}
private void GetModelObject(object obj)
{
if(obj!=null)
{
selectStudentModel = obj as StudentModel;
}
}
}
}
Model 层(Model 层主要用来创建数据模型 和 对数据库的映射,我这里使用了SqlSuger Code First 去实现数据库映射,同是界面对数据模型双向绑定 INotifyPropertyChanged 这个接口主要实现通知客户端数据刷新,System自带接口)
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SqlSugar;
namespace MVVMTest.Model
{
[SugarTable("StudentData")] //映射表名
public class StudentModel : INotifyPropertyChanged
{
private string _Name { get; set; }
[SugarColumn(IsNullable =true)]
public string Name
{
get { return _Name; }
set
{
_Name = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Name"));
}
}
private int _Id { get; set; }
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)] //主键
public int Id { get { return _Id; } set { _Id = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Id")); } }
private string _Year { get; set; }
[SugarColumn(IsNullable = true)]
public string Year { get { return _Year; } set { _Year = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Year")); } }
private string _Address { get; set; }
[SugarColumn(IsNullable = true)]
public string Address { get { return _Address; } set { _Address = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Address")); } }
private string _PhoneNumber { get; set; }
[SugarColumn(IsNullable = true)]
public string PhoneNumber { get { return _PhoneNumber; } set { _PhoneNumber = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("PhoneNumber")); } }
[SugarColumn(IsIgnore = true)]
public List StudentList { get { return studentData; } set { studentData = value;PropertyChanged?.Invoke(this,new PropertyChangedEventArgs("StudentList")); } }
private List studentData = new List() { };
public event PropertyChangedEventHandler PropertyChanged;
}
}
2.业务逻辑层(这里我也用了单例,并且保证线程安全)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using MVVMTest.DataAccess.DataBase;
using MVVMTest.Common;
using MVVMTest.Model;
using System.Data;
using System.Collections;
using System.Reflection;
namespace MVVMTest.BusinessLogic
{
class BusinessLogic
{
private BusinessLogic()
{
}
private static readonly object obj=new object();
private volatile static BusinessLogic instance = null;
SqlSugerHelper sqlSugerHelper = new SqlSugerHelper();
public static BusinessLogic Instance
{
get
{
if(instance==null)
{
lock(obj)
{
if(instance == null)
instance = new BusinessLogic();
}
}
return instance;
}
}
public void SetRequest(Type dataModel)
{
sqlSugerHelper.IniDB(GlobelEnum.DatabaseType.SqlServer, dataModel);
}
public void InsertData(StudentModel studentModel)
{
sqlSugerHelper.Insert(studentModel);
}
public List QueryData()
{
List dataTable = new List();
dataTable = sqlSugerHelper.Query();
return dataTable;
}
public void DeleteData(StudentModel studentModel)
{
sqlSugerHelper.Delete(studentModel);
}
public void UpdataData(StudentModel studentModel)
{
sqlSugerHelper.Updata(studentModel);
}
private DataTable ListToDt(IEnumerable collection)
{
var props = typeof(T).GetProperties();
var dt = new DataTable();
dt.Columns.AddRange(props.Select(p => new
DataColumn(p.Name, p.PropertyType)).ToArray());
if (collection.Count() > 0)
{
for (int i = 0; i < collection.Count(); i++)
{
ArrayList tempList = new ArrayList();
foreach (PropertyInfo pi in props)
{
object obj = pi.GetValue(collection.ElementAt(i), null);
tempList.Add(obj);
}
object[] array = tempList.ToArray();
dt.LoadDataRow(array, true);
}
}
return dt;
}
}
}
3.数据访问层(这里针对不同的数据库我使用了工厂模式去实现,由用户使用的时候再去选择实例哪一个数据库,这里的代码可能处理的不太好,欢迎大家发表不同意见)
(1)数据库基类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using SqlSugar;
namespace MVVMTest.DataAccess.DataBase
{
public abstract class SqlBase
{
public abstract SqlSugarClient IniDb(Type DataModel, string DataBaseName, string ServerName) ;
}
}
(2)数据库子类(SqlSever)(这里设计SqlSuger Code First 的代码)
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MVVMTest.DataAccess.DataBase
{
public class SqlSever : SqlBase
{
public override SqlSugarClient IniDb(Type DataModel, string DataBaseName, string ServerName )
{
SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
{
ConnectionString =string.Format("server={0};database={1};uid=数据库账户;pwd=密码, ServerName, DataBaseName),
DbType = SqlSugar.DbType.SqlServer,//设置数据库类型
IsAutoCloseConnection = true,//自动释放数据务,如果存在事务,在事务结束后释放
InitKeyType = InitKeyType.Attribute //从实体特性中读取主键自增列信息
});
db.Aop.OnLogExecuting = (sql, pars) =>
{
Console.WriteLine(sql + "\r\n" +
db.Utilities.SerializeObject(pars.ToString())); //打印数据库日志
Console.WriteLine();
};
//创建数据库 如果该库不存在,则进行创建。(这里创建的是名字为 Student 数据库)
db.DbMaintenance.CreateDatabase();
//初始化数据表,如果没有则创建
db.CodeFirst.InitTables(DataModel);
return db;
}
}
}
(3)数据库子类(Sqlite)
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MVVMTest.DataAccess.DataBase
{
public class Sqlite : SqlBase
{
public override SqlSugarClient IniDb(Type DataModel, string DataBaseName, string ServerName)
{
SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
{
ConnectionString = string.Format("server={0};database={1};uid=数据库账户;pwd=密码", ServerName, DataBaseName),
DbType = SqlSugar.DbType.Sqlite,//设置数据库类型
IsAutoCloseConnection = true,//自动释放数据务,如果存在事务,在事务结束后释放
InitKeyType = InitKeyType.Attribute //从实体特性中读取主键自增列信息
});
db.Aop.OnLogExecuting = (sql, pars) =>
{
Console.WriteLine(sql + "\r\n" +
db.Utilities.SerializeObject(pars.ToString()));
Console.WriteLine();
};
//创建数据库 如果该库不存在,则进行创建。(这里创建的是名字为 Student 数据库)
db.DbMaintenance.CreateDatabase();
//初始化数据表,如果没有则创建
db.CodeFirst.InitTables(DataModel);
return db;
}
}
}
(4) 数据库工厂
using MVVMTest.Common;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MVVMTest.DataAccess.DataBase
{
public class DataBaseFactory
{
private DataBaseFactory()
{
}
static DataBaseFactory() { }
public static DataBaseFactory Instance { get; } = new DataBaseFactory();
public SqlBase Create(GlobelEnum.DatabaseType databaseType)
{
SqlBase dataBaseFactory = null;
switch(databaseType)
{
case GlobelEnum.DatabaseType.MySql:
break;
case GlobelEnum.DatabaseType.SqlServer:
dataBaseFactory = new SqlSever();
break;
}
return dataBaseFactory;
}
}
}
(5)数据库访问接口
using MVVMTest.Common;
using MVVMTest.Model;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MVVMTest.Model;
using System.Data;
namespace MVVMTest.DataAccess.DataBase
{
public class SqlSugerHelper
{
SqlBase sqlBase;
SqlSugarClient sqlSugarClient;
public void IniDB(GlobelEnum.DatabaseType databaseType, Type dataModel)
{
sqlBase = DataBaseFactory.Instance.Create(databaseType);
sqlSugarClient = sqlBase.IniDb(dataModel, "Student", "服务器名称");
}
public void Insert(StudentModel studentModel)
{
sqlSugarClient.Insertable(studentModel).ExecuteCommand();
//var a = sqlSugarClient.Ado.SqlQuery("select * from StudentData"); // 数据库语句
}
public List Query()
{
List studentModels = new List();
studentModels=sqlSugarClient.Queryable().ToList();
sqlSugarClient.Close();
return studentModels;
}
public void Delete(StudentModel studentModel)
{
sqlSugarClient.Deleteable(studentModel).ExecuteCommand();
}
public void Updata(StudentModel studentModel)
{
sqlSugarClient.Updateable(studentModel).ExecuteCommand();
}
}
}
公共类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MVVMTest.Common
{
public static class GlobelEnum
{
public enum SqlCommand
{
Invalid=-1,
IniDB=0,
Query=1,
Insert=2,
Updata=3,
Delete=4,
}
public enum DatabaseType
{
Invalid=0,
Sqlite=1,
SqlServer=2,
MySql=3,
}
public enum ORMType
{
Invalid = 0,
CodeFirst=1,
DBFirst=2,
ModelFirst=3,
}
}
}
公共类中有一些是不需要的枚举,可以不用完全借鉴
欢迎各位大神指导评论
你可能感兴趣的:(架构,c#,wpf,sqlserver)
【百问百答系列】-全面了解Transformer(未来发展)
什么都想学的阿超
原理概念 # 深度学习 transformer 深度学习 人工智能
【百问百答系列】-全面了解Transformer引言初次接触Transformer时,那些复杂的概念和精妙的架构设计,着实让我困惑不已。但随着一个一个问题的深入探究,从它的基本概念、原理架构,到如何训练、模型优化,再到其广泛的应用领域以及充满潜力的未来发展,我对它的理解也越来越深刻。希望借由这个百问百答系列,把在学习Transformer过程中的思考、疑问与收获分享出来。未来发展97.随着数据量的
荔枝混合云网络实践:技术创新与未来展望
ITPUB-微风
数字化
在数字化转型的浪潮中,荔枝集团作为中国在线音频的领军企业,于2020年1月17日成功登陆纳斯达克交易所,成为行业内的先锋。在云计算领域,荔枝集团通过其运维总监熊振的领导,专注于IaaS建设、SDN和全球化混合云网络架构设计,展现了其在技术创新上的深厚实力。本文将深入探讨混合云的发展趋势、管理中的痛点和挑战,以及荔枝混合云iRock的介绍和实现。一、混合云管理的痛点和挑战随着企业对云计算需求的增长,
Django实现API配合JWT进行用户验证的方法
Mr数据杨
Python Web开发 python js django JWT
在现代Web应用中,API认证是一项至关重要的功能。随着分布式架构和跨平台应用的发展,传统的Session认证方式逐渐难以满足需求。JSONWebToken(JWT)提供了一种无需在服务端存储用户状态的认证方式,适用于无状态的应用程序。本教程将以Django为例,介绍如何通过JWT实现对API的认证控制,包括基本配置与实际应用中的代码示例。文章目录传统的Session和JWT的区别JWT工作原理D
Amazon Aurora深度探索(一)
仲培艺
数据库 Amazon-Aurora
【导语】Amazon的Aurora自从问世,就备受关注,其性能和实现架构是被关注的热点。2017年,Amazon发表了一篇论文,披露其实现的一些技术细节。本文在此背景下,对Aurora系统的实现从整体架构、存储、事务处理三个方面进行深入探讨,并从数据库内核技术实现的角度对Aurora做了一定的推测。2017年,Amazon在SIGMOD上发表了论文《AmazonAurora:DesignConsi
【python】flash-attn安装
x66ccff
python 开发语言
这个命令:确保使用正确的CUDA12.6工具链设置必要的CUDA环境变量包含了常见的GPU架构支持利用你的128核心进行并行编译#清理之前的安装proxychains4pipuninstall-yflash-attn#获取CUDA路径CUDA_PATH=$(dirname$(dirname$(whichnvcc)))#使用proxychains4安装CUDA_HOME=$CUDA_PATH\TOR
Node.js 完全教程:从入门到精通
web15117360223
面试 学习路线 阿里巴巴 node.js
Node.js完全教程:从入门到精通Node.js是一个基于ChromeV8引擎的JavaScript运行环境,允许开发者在服务器端使用JavaScript。它的非阻塞I/O和事件驱动架构使得Node.js非常适合于构建高性能的网络应用。本文将详细介绍Node.js的安装、基本语法、模块系统、异步编程、Express框架、数据库操作等内容,帮助你从入门到精通Node.js。1.Node.js简介N
探索企业级智能对话:ChatGPT + 企业数据 (C) 开源项目推荐
芮川琨Jack
探索企业级智能对话:ChatGPT+企业数据(C#)开源项目推荐azure-search-openai-demo-csharpAsampleappfortheRetrieval-AugmentedGenerationpatternrunninginAzure,usingAzureCognitiveSearchforretrievalandAzureOpenAIlargelanguagemodels
推荐开源项目:Contoso Data Generator
侯深业Dorian
推荐开源项目:ContosoDataGeneratorContoso-Data-GeneratorCustomContosodatabasegeneratorandready-to-useContososampledatabasesforSQLServer项目地址:https://gitcode.com/gh_mirrors/co/Contoso-Data-Generator1、项目介绍Conto
Webpack Module Federation实战:微前端架构
糖糖老师436
前端 webpack 架构
WebpackModuleFederation是Webpack5引入的一个特性,它支持微前端架构,允许不同的Web应用之间共享模块,而不需要运行时的容器或服务器端的构建步骤。项目结构假设有两个独立的React应用:app1和app2,其中app2将通过ModuleFederation作为远程模块被app1消费。app1:主应用app2:作为远程微应用app2配置首先,在app2中配置Webpack
Mamba架构深度解析:基于状态空间模型的线性复杂度序列处理实战指南(附代码+案例
燃灯工作室
Ai 架构
一、技术原理:状态空间模型与线性复杂度数学推导1.传统状态空间模型(SSM)连续系统描述:h′(t)=Ah(t)+Bx(t)y(t)=Ch(t)+Dx(t)\begin{aligned}h'(t)&=Ah(t)+Bx(t)\\y(t)&=Ch(t)+Dx(t)\end{aligned}h′(t)y(t)=Ah(t)+Bx(t)=Ch(t)+Dx(t)离散化后(零阶保持法):hk=Aˉhk−1+Bˉ
深入了解React Fiber:React的新架构
糖糖老师436
react.js 架构 前端
ReactFiber是React16引入的一种全新的协调引擎,旨在解决旧版React在性能和灵活性方面的不足。本文将深入探讨ReactFiber的工作原理、其背后的设计理念,以及它如何提升应用的性能。我们会用通俗易懂的语言,帮助你轻松理解这个复杂的概念,并通过代码示例来进一步解释。1.什么是ReactFiber?ReactFiber是对React核心算法的一次彻底重构。旧版的React使用的是“S
DeepSeek:突破闭源封锁,引领大模型新时代
fanstinmsl
算法 语言模型
近年来,人工智能领域蓬勃发展,大模型作为其中的核心技术,其重要性不言而喻。然而,大模型的训练和部署往往面临着硬件依赖性强、成本高昂、效率低下等挑战。DeepSeek的出现,为解决这些问题提供了全新的思路和方案。DeepSeek的核心优势:1.减少硬件依赖:DeepSeek通过算法优化和架构创新,降低了对高性能硬件的依赖,使得大模型的训练和部署可以在更广泛的硬件平台上进行,极大地降低了应用门槛。**
简单搞定数仓搭建:数仓规范
白枭
大数据开发 数仓 hive
1.数据模型架构规范1.1数据层次的划分ODS:OperationalDataStore,操作数据层,在结构上其与源系统的增量或者全量数据基本保持一致。它相当于DW数据的一个数据准备区,同时又承担着基础数据的记录以及历史变化。其主要作用是把基础数据引入到DMP。CDM:CommonDataModel,公共维度模型层,又细分为DWD和DWS。它的主要作用是完成数据加工与整合,建立一致性的维度,构建可
Haxe:OpenFL框架与Haxe游戏开发_2024-07-15_07-13-55.Tex
chenjj4003
游戏开发2 网络 游戏引擎 c++ 开发语言 深度学习
Haxe:OpenFL框架与Haxe游戏开发Haxe简介Haxe语言概述Haxe是一种开源的、多范式编程语言,它被设计为一种高级语言,用于编写跨平台的应用程序。Haxe的独特之处在于它的编译器,能够将Haxe代码编译成多种目标语言,包括JavaScript、C++、Java、PHP、Python、C#和ActionScript。这种能力使得开发者能够使用相同的代码库为不同的平台生成代码,极大地提高
Vulkan:Vulkan基础架构与环境搭建_2024-07-20_13-37-15.Tex
chenjj4003
游戏开发 网络 服务器 linux 前端 数据结构 android java
Vulkan:Vulkan基础架构与环境搭建Vulkan简介Vulkan的历史与发展Vulkan是一个跨平台的2D和3D图形及计算API,由KhronosGroup开发。KhronosGroup是一个由多家公司组成的非营利性行业联盟,负责制定和维护多种开放标准,包括Vulkan、OpenGL、OpenCL等。Vulkan的设计目标是提供更高效、更直接的硬件访问,以减少CPU在图形渲染中的开销,同时
关于单片机代码架构分层
卤煮小鱼
三区一线理论#includevoidinit();voidinitial();voiddelay_l(unsignedintul);voidAPK();voidmain(){/*注释一:*专门用来初始化单片机自己的寄存器以及个别外围要求响应速度快的输出设备,*防止刚上电之后,由于输出IO口电平状态不确定而导致外围设备误动作,*比如继电器的误动作等等。*/init();/*注释二:*延时时间一般是0
嵌入式软件架构设计分层思路
轻松学C语言
嵌入式 单片机 uboot framework qt
在正规的项目开发中,项目往往是并行开发的,也就是说硬件设计、底层软件设计、应用软件设计等是同步进行的。比如说在开发板上调试模块驱动,在其他平台上调试应用程序再移植到目前这个平台等。嵌入式专栏1为什么很少看见嵌入式软件架构师职位在招聘网站搜索架构师,会出现各种系统架构师:web架构师,后台服务端架构师等等,但是唯独很难看到嵌入式软件架构师。嵌入式软件不需要架构吗,驱动不需要架构吗?答案当然是需要,不
python 语音转文本中文——DeepSpeech
drebander
python 开发语言 DeepSpeech
DeepSpeech简介与音频转文本实践DeepSpeech是由Mozilla开发的一种开源语音识别引擎,基于深度学习技术,采用端到端架构,可以高效地将语音转换为文本。其核心算法受BaiduDeepSpeech论文启发,使用RecurrentNeuralNetwork(RNN)处理语音数据。一、DeepSpeech的原理1.核心组件声学模型:将语音波形转换为概率分布表示。语言模型:对语音识别结果进
MySQL 数据库作发布系统的存储,一天五万条以上的增量, 预 计运维三年,怎么优化?思维导图 代码示例(java 架构)
用心去追梦
数据库 mysql 运维
对于一个每天有五万条以上增量、预计运维三年的MySQL发布系统,优化和规划是非常重要的。这不仅涉及到数据库本身的性能优化,还包括架构设计、硬件选择、监控与维护等多个方面。以下是一些建议和策略:优化策略数据库架构设计分库分表(Sharding):将数据分散到多个数据库或表中,减轻单个实例的压力。读写分离:使用主从复制,将读操作分流到从服务器上,减少主服务器负载。缓存机制:利用Redis或Memcac
架构演进史
三花学编程
架构 架构 java 微服务
软件架构是软件工程的基石,它不仅影响着系统的性能、可维护性和可扩展性,也直接关系到开发团队的效率和项目的成功。随着技术的不断发展和业务需求的变化,软件架构经历了多个阶段的演进。本文将详细探讨这些阶段及其背后的驱动因素。1.单体架构时代1.1定义与特点单体架构是指将所有功能模块打包在一个独立的应用程序中。早期的计算机应用程序大多采用这种架构,所有的代码、数据和资源都集中在一个地方。1.2优点简单性:
系统架构设计基础知识
胶水代码
系统架构设计师 系统架构
一.系统架构概述系统架构的定义系统架构(SystemArchitecture)是系统的一种整体的高层次的结构表示,是系统的骨架和根基,支撑和链接各个部分,包括构件、连接件、约束规范以及指导这些内容设计与演化的原理,是刻画系统整体抽象结构的一种手段。软架构的定义软件体系结构为软件系统提供了结构、行为和属性的高级抽象,由构成系统的元素描述、元素的外部可见属性、这些元素的相互作用、指导元素集成的模式以及
突破性能极限:DeepSeek开源FlashMLA解码内核技术解析
Shockang
DeepSeek DeepSeek 技术前沿
引言:大模型时代的推理加速革命在生成式AI大行其道的今天,如何提升大语言模型的推理效率已成为行业焦点。DeepSeek团队最新开源的FlashMLA项目凭借其惊人的性能表现引发关注——在H800GPU上实现580TFLOPS计算性能,这正是大模型推理优化的重大突破。项目亮点速览GitHub仓库|性能测试核心优势硬件级优化:专为Hopper架构GPU设计,充分发挥TensorCore潜力内存黑科技:
【PyTorch 实战2:UNet 分割模型】10min揭秘 UNet 分割网络如何工作以及pytorch代码实现(详细代码实现)
xiaoh_7
pytorch 网络 图像处理 计算机视觉
UNet网络详解及PyTorch实现一、UNet网络原理 U-Net,自2015年诞生以来,便以其卓越的性能在生物医学图像分割领域崭露头角。作为FCN的一种变体,U-Net凭借其Encoder-Decoder的精巧结构,不仅在医学图像分析中大放异彩,更在卫星图像分割、工业瑕疵检测等多个领域展现出强大的应用能力。UNet是一种常用于图像分割的卷积神经网络架构,其特点在于其U型结构,包括一个收缩路径
【PyTorch项目实战】图像分割 —— U-Net:Semantic segmentation with PyTorch
胖墩会武术
深度学习 PyTorch项目实战 python unet pytorch
文章目录一、项目介绍二、项目实战2.1、环境搭建2.1.1、下载源码2.1.2、下载预训练模型2.1.3、下载训练集2.2、环境配置2.3、代码优化+架构优化2.4、模型预测:predict.pyU-Net是一种用于生物医学图像分割的卷积神经网络架构,最初由OlafRonneberger等人于2015年提出。论文:U-Net:ConvolutionalNetworksforBiomedicalIm
微服务架构是什么?怎么使用?
刘zy_9527
架构 微服务 java
微服务架构一.服务架构演变过程1.1单体应用架构所有的功能都在一个项目中1.2集群架构把一个单体项目部署多个,使用nginx进行负载均衡,根据负载均衡策略调用后端服务。不好的地方:有的服务访问量大,有的服务访问量小,这样不管访问量大小都会进行多次部署。1.3垂直架构将不同功能模块进行拆分,服务之间可以相互调用,还可以根据访问量大小进行选择性的多次部署。不好的地方:服务之间的管理调用比较麻烦1.4微
Python微调DeepSeek-R1-Distill-Qwen-1.5B模型:使用Transformers和PyTorch进行训练
煤炭里de黑猫
pytorch python 人工智能 机器学习
前言近年来,基于Transformer架构的预训练语言模型如GPT、BERT等已经取得了显著的成果,广泛应用于自然语言处理(NLP)的各个领域。为了让这些模型更加适应特定任务,我们通常会进行微调(Fine-tuning)。本博客将详细介绍如何微调一个名为Qwen-1.5B的模型,使用HuggingFace的Transformers库与PyTorch框架来实现。我们将通过一步步的代码解析,帮助你理解
面试题:SpringCloud的优缺点有哪些
clownAdam
SpringCloud面试 spring cloud 后端 面试 微服务
面试题:SpringCloud的优缺点有哪些在面试中回答SpringCloud的优缺点时,可以结合其实际应用场景和技术特点,给出简洁、清晰的回答。以下是一个适合面试场景的回答模板:SpringCloud的优点微服务生态完善SpringCloud提供了微服务架构中常见的解决方案,如服务注册与发现(Eureka、Consul)、配置中心(SpringCloudConfig)、负载均衡(Ribbon)、
架构的演进
阿里云云原生
Serverless 技术公开课
作者|许晓斌阿里云高级技术专家传统单体应用架构十多年前主流的应用架构都是单体应用,部署形式就是一台服务器加一个数据库,在这种架构下,运维人员会小心翼翼地维护这台服务器,以保证服务的可用性。▲单体架构单体应用架构面临的问题随着业务的增长,这种最简单的单体应用架构很快就面临两个问题。首先,这里只有一台服务器,如果这台服务器出现故障,例如硬件损坏,那么整个服务就会不可用;其次,业务量变大之后,一台服务器
以太坊介绍
倒霉男孩
区块链 区块链
文章目录以太坊以太坊和比特币的区别以太网货币单位以太坊以太坊是“世界的计算机”。以太坊是一种确定性但实际上无界的状态机,它有两个基本功能,第一个是全局可访问的单例状态,第二个是对状态进行更改的虚拟机。从更实际的角度来说,以太坊是一个开源的,全球的去中心化计算架构,执行成为智能合约的程序。它使用区块链来从同步和存储系统状态,以及称为ether的加密货币来计量和约束执行资源成本。智能合约相当于可以在以
Linux平台流行病毒解析 企业用户为主要攻击目标
火绒网络科技
linux 网络 运维 安全 服务器
Linux操作系统因拥有高稳定性、通用性、开源等特性,通常在web服务器、IoT、嵌入式开发、超级计算机等领域作为首选操作系统。近年来,不仅互联网行业,政府、金融、教育、医疗、制造业、能源等行业也越来越多采用Linux架构的办公系统和服务器系统。无论是为了维护技术工程人员的开发安全,还是保护企业的信息和财产安全,Linux系统终端的安全防护日益成为一个重要的课题。企业用户更易成为Linux病毒攻击
mysql主从数据同步
林鹤霄
mysql主从数据同步
配置mysql5.5主从服务器(转)
教程开始:一、安装MySQL
说明:在两台MySQL服务器192.168.21.169和192.168.21.168上分别进行如下操作,安装MySQL 5.5.22
二、配置MySQL主服务器(192.168.21.169)mysql -uroot -p &nb
oracle学习笔记
caoyong
oracle
1、ORACLE的安装
a>、ORACLE的版本
8i,9i : i是internet
10g,11g : grid (网格)
12c : cloud (云计算)
b>、10g不支持win7
&
数据库,SQL零基础入门
天子之骄
sql 数据库入门 基本术语
数据库,SQL零基础入门
做网站肯定离不开数据库,本人之前没怎么具体接触SQL,这几天起早贪黑得各种入门,恶补脑洞。一些具体的知识点,可以让小白不再迷茫的术语,拿来与大家分享。
数据库,永久数据的一个或多个大型结构化集合,通常与更新和查询数据的软件相关
pom.xml
一炮送你回车库
pom.xml
1、一级元素dependencies是可以被子项目继承的
2、一级元素dependencyManagement是定义该项目群里jar包版本号的,通常和一级元素properties一起使用,既然有继承,也肯定有一级元素modules来定义子元素
3、父项目里的一级元素<modules>
<module>lcas-admin-war</module>
<
sql查地区省市县
3213213333332132
sql mysql
-- db_yhm_city
SELECT * FROM db_yhm_city WHERE class_parent_id = 1 -- 海南 class_id = 9 港、奥、台 class_id = 33、34、35
SELECT * FROM db_yhm_city WHERE class_parent_id =169
SELECT d1.cla
关于监听器那些让人头疼的事
宝剑锋梅花香
画图板 监听器 鼠标监听器
本人初学JAVA,对于界面开发我只能说有点蛋疼,用JAVA来做界面的话确实需要一定的耐心(不使用插件,就算使用插件的话也没好多少)既然Java提供了界面开发,老师又要求做,只能硬着头皮上啦。但是监听器还真是个难懂的地方,我是上了几次课才略微搞懂了些。
JAVA的遍历MAP
darkranger
map
Java Map遍历方式的选择
1. 阐述
对于Java中Map的遍历方式,很多文章都推荐使用entrySet,认为其比keySet的效率高很多。理由是:entrySet方法一次拿到所有key和value的集合;而keySet拿到的只是key的集合,针对每个key,都要去Map中额外查找一次value,从而降低了总体效率。那么实际情况如何呢?
为了解遍历性能的真实差距,包括在遍历ke
POJ 2312 Battle City 优先多列+bfs
aijuans
搜索
来源:http://poj.org/problem?id=2312
题意:题目背景就是小时候玩的坦克大战,求从起点到终点最少需要多少步。已知S和R是不能走得,E是空的,可以走,B是砖,只有打掉后才可以通过。
思路:很容易看出来这是一道广搜的题目,但是因为走E和走B所需要的时间不一样,因此不能用普通的队列存点。因为对于走B来说,要先打掉砖才能通过,所以我们可以理解为走B需要两步,而走E是指需要1
Hibernate与Jpa的关系,终于弄懂
avords
java Hibernate 数据库 jpa
我知道Jpa是一种规范,而Hibernate是它的一种实现。除了Hibernate,还有EclipseLink(曾经的toplink),OpenJPA等可供选择,所以使用Jpa的一个好处是,可以更换实现而不必改动太多代码。
在play中定义Model时,使用的是jpa的annotations,比如javax.persistence.Entity, Table, Column, OneToMany
酸爽的console.log
bee1314
console
在前端的开发中,console.log那是开发必备啊,简直直观。通过写小函数,组合大功能。更容易测试。但是在打版本时,就要删除console.log,打完版本进入开发状态又要添加,真不够爽。重复劳动太多。所以可以做些简单地封装,方便开发和上线。
/**
* log.js hufeng
* The safe wrapper for `console.xxx` functions
*
哈佛教授:穷人和过于忙碌的人有一个共同思维特质
bijian1013
时间管理 励志人生 穷人 过于忙碌
一个跨学科团队今年完成了一项对资源稀缺状况下人的思维方式的研究,结论是:穷人和过于忙碌的人有一个共同思维特质,即注意力被稀缺资源过分占据,引起认知和判断力的全面下降。这项研究是心理学、行为经济学和政策研究学者协作的典范。
这个研究源于穆来纳森对自己拖延症的憎恨。他7岁从印度移民美国,很快就如鱼得水,哈佛毕业
other operate
征客丶
OS osx
一、Mac Finder 设置排序方式,预览栏 在显示-》查看显示选项中
二、有时预览显示时,卡死在那,有可能是一些临时文件夹被删除了,如:/private/tmp[有待验证]
--------------------------------------------------------------------
若有其他凝问或文中有错误,请及时向我指出,
我好及时改正,同时也让我们一
【Scala五】分析Spark源代码总结的Scala语法三
bit1129
scala
1. If语句作为表达式
val properties = if (jobIdToActiveJob.contains(jobId)) {
jobIdToActiveJob(stage.jobId).properties
} else {
// this stage will be assigned to "default" po
ZooKeeper 入门
BlueSkator
中间件 zk
ZooKeeper是一个高可用的分布式数据管理与系统协调框架。基于对Paxos算法的实现,使该框架保证了分布式环境中数据的强一致性,也正是基于这样的特性,使得ZooKeeper解决很多分布式问题。网上对ZK的应用场景也有不少介绍,本文将结合作者身边的项目例子,系统地对ZK的应用场景进行一个分门归类的介绍。
值得注意的是,ZK并非天生就是为这些应用场景设计的,都是后来众多开发者根据其框架的特性,利
MySQL取得当前时间的函数是什么 格式化日期的函数是什么
BreakingBad
mysql Date
取得当前时间用 now() 就行。
在数据库中格式化时间 用DATE_FORMA T(date, format) .
根据格式串format 格式化日期或日期和时间值date,返回结果串。
可用DATE_FORMAT( ) 来格式化DATE 或DATETIME 值,以便得到所希望的格式。根据format字符串格式化date值:
%S, %s 两位数字形式的秒( 00,01,
读《研磨设计模式》-代码笔记-组合模式
bylijinnan
java 设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
import java.util.ArrayList;
import java.util.List;
abstract class Component {
public abstract void printStruct(Str
4_JAVA+Oracle面试题(有答案)
chenke
oracle
基础测试题
卷面上不能出现任何的涂写文字,所有的答案要求写在答题纸上,考卷不得带走。
选择题
1、 What will happen when you attempt to compile and run the following code? (3)
public class Static {
static {
int x = 5; // 在static内有效
}
st
新一代工作流系统设计目标
comsci
工作 算法 脚本
用户只需要给工作流系统制定若干个需求,流程系统根据需求,并结合事先输入的组织机构和权限结构,调用若干算法,在流程展示版面上面显示出系统自动生成的流程图,然后由用户根据实际情况对该流程图进行微调,直到满意为止,流程在运行过程中,系统和用户可以根据情况对流程进行实时的调整,包括拓扑结构的调整,权限的调整,内置脚本的调整。。。。。
在这个设计中,最难的地方是系统根据什么来生成流
oracle 行链接与行迁移
daizj
oracle 行迁移
表里的一行对于一个数据块太大的情况有二种(一行在一个数据块里放不下)
第一种情况:
INSERT的时候,INSERT时候行的大小就超一个块的大小。Oracle把这行的数据存储在一连串的数据块里(Oracle Stores the data for the row in a chain of data blocks),这种情况称为行链接(Row Chain),一般不可避免(除非使用更大的数据
[JShop]开源电子商务系统jshop的系统缓存实现
dinguangx
jshop 电子商务
前言
jeeshop中通过SystemManager管理了大量的缓存数据,来提升系统的性能,但这些缓存数据全部都是存放于内存中的,无法满足特定场景的数据更新(如集群环境)。JShop对jeeshop的缓存机制进行了扩展,提供CacheProvider来辅助SystemManager管理这些缓存数据,通过CacheProvider,可以把缓存存放在内存,ehcache,redis,memcache
初三全学年难记忆单词
dcj3sjt126com
english word
several 儿子;若干
shelf 架子
knowledge 知识;学问
librarian 图书管理员
abroad 到国外,在国外
surf 冲浪
wave 浪;波浪
twice 两次;两倍
describe 描写;叙述
especially 特别;尤其
attract 吸引
prize 奖品;奖赏
competition 比赛;竞争
event 大事;事件
O
sphinx实践
dcj3sjt126com
sphinx
安装参考地址:http://briansnelson.com/How_to_install_Sphinx_on_Centos_Server
yum install sphinx
如果失败的话使用下面的方式安装
wget http://sphinxsearch.com/files/sphinx-2.2.9-1.rhel6.x86_64.rpm
yum loca
JPA之JPQL(三)
frank1234
orm jpa JPQL
1 什么是JPQL
JPQL是Java Persistence Query Language的简称,可以看成是JPA中的HQL, JPQL支持各种复杂查询。
2 检索单个对象
@Test
public void querySingleObject1() {
Query query = em.createQuery("sele
Remove Duplicates from Sorted Array II
hcx2013
remove
Follow up for "Remove Duplicates":What if duplicates are allowed at most twice?
For example,Given sorted array nums = [1,1,1,2,2,3],
Your function should return length
Spring4新特性——Groovy Bean定义DSL
jinnianshilongnian
spring 4
Spring4新特性——泛型限定式依赖注入
Spring4新特性——核心容器的其他改进
Spring4新特性——Web开发的增强
Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC
Spring4新特性——Groovy Bean定义DSL
Spring4新特性——更好的Java泛型操作API
Spring4新
CentOS安装Mysql5.5
liuxingguome
centos
CentOS下以RPM方式安装MySQL5.5
首先卸载系统自带Mysql:
yum remove mysql mysql-server mysql-libs compat-mysql51
rm -rf /var/lib/mysql
rm /etc/my.cnf
查看是否还有mysql软件:
rpm -qa|grep mysql
去http://dev.mysql.c
第14章 工具函数(下)
onestopweb
函数
index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/
POJ 1050
SaraWon
二维数组 子矩阵 最大和
POJ ACM第1050题的详细描述,请参照
http://acm.pku.edu.cn/JudgeOnline/problem?id=1050
题目意思:
给定包含有正负整型的二维数组,找出所有子矩阵的和的最大值。
如二维数组
0 -2 -7 0
9 2 -6 2
-4 1 -4 1
-1 8 0 -2
中和最大的子矩阵是
9 2
-4 1
-1 8
且最大和是15
[5]设计模式——单例模式
tsface
java 单例 设计模式 虚拟机
单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点
安全的单例模式:
/*
* @(#)Singleton.java 2014-8-1
*
* Copyright 2014 XXXX, Inc. All rights reserved.
*/
package com.fiberhome.singleton;
Java8全新打造,英语学习supertool
yangshangchuan
java superword 闭包 java8 函数式编程
superword是一个Java实现的英文单词分析软件,主要研究英语单词音近形似转化规律、前缀后缀规律、词之间的相似性规律等等。Clean code、Fluent style、Java8 feature: Lambdas, Streams and Functional-style Programming。
升学考试、工作求职、充电提高,都少不了英语的身影,英语对我们来说实在太重要