数据源架构模式之活动记录
【活动记录的意图】
一个对象,它包装数据表或视图中某一行,封装数据库访问,并在这些数据上增加了领域逻辑。
【活动记录的适用场景】
适用于不太复杂的领域逻辑,如CRUD操作等。
【活动记录的运行机制】
对象既有数据又有行为。其使用最直接的方法,将数据访问逻辑置于领域对象中。
活动记录的本质是一个领域模型,这个领域模型中的类和基数据库中的记录结构应该完全匹配,类的每个域对应表的每一列。
一般来说,活动记录包括如下一些方法:
1、由数据行构造一个活动记录实例;
2、为将来对表的插入构造一个新的实例;
3、用静态查找方法来包装常用的SQL查询和返回活动记录;
4、更新数据库并将活动记录中的数据插入数据库;
5、获取或设置域;
6、实现部分业务逻辑。
【活动记录的优点和缺点】
优点:
1、简单,容易创建并且容易理解。
2、在使用事务脚本时,减少代码复制。
3、可以在改变数据库结构时不改变领域逻辑。
4、基于单个活动记录的派生和测试验证会很有效。
缺点:
1、没有隐藏关系数据库的存在。
2、仅当活动记录对象和数据库中表直接对应时,活动记录才会有效。
3、要求对象的设计和数据库的设计紧耦合,这使得项目中的进一步重构很困难
【活动记录与其它模式】
数据源架构模式之行数据入口:活动记录与行数据入口十分类似。二者的主要差别是行数据入口 仅有数据库访问而活动记录既有数据源逻辑又有领域逻辑。
【活动记录的PHP示例】
<ol class="dp-c"> <li class="alt"><span><span><?php </span></span></span></li> <li><span> </span></li> <li class="alt"> <span class="comment">/** </span> </li> <li><span><span class="comment"> * 企业应用架构 数据源架构模式之活动记录 2010-10-17 sz </span> </span></li> <li class="alt"><span><span class="comment"> * @author phppan.p#gmail.com http://www.phppan.com </span> </span></li> <li><span><span class="comment"> * 哥学社成员(http://www.blog-brother.com/) </span> </span></li> <li class="alt"><span><span class="comment"> * @package architecture </span> </span></li> <li><span><span class="comment"> */</span><span> </span></span></li> <li class="alt"><span> </span></li> <li> <span class="comment">/** </span> </li> <li class="alt"><span><span class="comment"> * 定单类 </span> </span></li> <li><span><span class="comment"> */</span><span> </span></span></li> <li class="alt"> <span class="keyword">class</span><span> Order { </span> </li> <li><span> </span></li> <li class="alt"> <span> </span><span class="comment">/** </span> </li> <li><span><span class="comment"> * 定单ID </span> </span></li> <li class="alt"><span><span class="comment"> * @var <type> </type></span> </span></li> <li><span><span class="comment"> */</span><span> </span></span></li> <li class="alt"> <span> </span><span class="keyword">private</span><span> </span><span class="vars">$_order_id</span><span>; </span> </li> <li><span> </span></li> <li class="alt"> <span> </span><span class="comment">/** </span> </li> <li><span><span class="comment"> * 客户ID </span> </span></li> <li class="alt"><span><span class="comment"> * @var <type> </type></span> </span></li> <li><span><span class="comment"> */</span><span> </span></span></li> <li class="alt"> <span> </span><span class="keyword">private</span><span> </span><span class="vars">$_customer_id</span><span>; </span> </li> <li><span> </span></li> <li class="alt"> <span> </span><span class="comment">/** </span> </li> <li><span><span class="comment"> * 定单金额 </span> </span></li> <li class="alt"><span><span class="comment"> * @var <type> </type></span> </span></li> <li><span><span class="comment"> */</span><span> </span></span></li> <li class="alt"> <span> </span><span class="keyword">private</span><span> </span><span class="vars">$_amount</span><span>; </span> </li> <li><span> </span></li> <li class="alt"> <span> </span><span class="keyword">public</span><span> </span><span class="keyword">function</span><span> __construct(</span><span class="vars">$order_id</span><span>, </span><span class="vars">$customer_id</span><span>, </span><span class="vars">$amount</span><span>) { </span> </li> <li> <span> </span><span class="vars">$this</span><span>->_order_id = </span><span class="vars">$order_id</span><span>; </span> </li> <li class="alt"> <span> </span><span class="vars">$this</span><span>->_customer_id = </span><span class="vars">$customer_id</span><span>; </span> </li> <li> <span> </span><span class="vars">$this</span><span>->_amount = </span><span class="vars">$amount</span><span>; </span> </li> <li class="alt"><span> } </span></li> <li><span> </span></li> <li class="alt"> <span> </span><span class="comment">/** </span> </li> <li><span><span class="comment"> * 实例的删除操作 </span> </span></li> <li class="alt"><span><span class="comment"> */</span><span> </span></span></li> <li> <span> </span><span class="keyword">public</span><span> </span><span class="keyword">function</span><span> </span><span class="func">delete</span><span>() { </span> </li> <li class="alt"> <span> </span><span class="vars">$sql</span><span> = </span><span class="string">"DELETE FROM Order SET WHERE order_id = "</span><span> . </span><span class="vars">$this</span><span>->_order_id . </span><span class="string">" AND customer_id = "</span><span> . </span><span class="vars">$this</span><span>->_customer_id; </span> </li> <li> <span> </span><span class="keyword">return</span><span> DB::query(</span><span class="vars">$sql</span><span>); </span> </li> <li class="alt"><span> } </span></li> <li><span> </span></li> <li class="alt"> <span> </span><span class="comment">/** </span> </li> <li><span><span class="comment"> * 实例的更新操作 </span> </span></li> <li class="alt"><span><span class="comment"> */</span><span> </span></span></li> <li> <span> </span><span class="keyword">public</span><span> </span><span class="keyword">function</span><span> update() { </span> </li> <li class="alt"><span> } </span></li> <li><span> </span></li> <li class="alt"> <span> </span><span class="comment">/** </span> </li> <li><span><span class="comment"> * 插入操作 </span> </span></li> <li class="alt"><span><span class="comment"> */</span><span> </span></span></li> <li> <span> </span><span class="keyword">public</span><span> </span><span class="keywo </p> "></span> </li> </ol>

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

Pinduoduo 소프트웨어는 좋은 제품을 많이 제공하고 언제 어디서나 구입할 수 있으며 각 제품의 품질은 엄격하게 통제되고 모든 제품은 정품이며 우대 쇼핑 할인이 많아 누구나 온라인 쇼핑을 할 수 있습니다. 온라인으로 로그인하려면 휴대폰 번호를 입력하고, 온라인으로 여러 배송 주소와 연락처 정보를 추가하고, 다양한 카테고리의 제품 섹션을 언제든지 확인하고 구매하고 주문하세요. 집을 떠나지 않고도 편리함을 경험할 수 있습니다. 온라인 쇼핑 서비스를 이용하면 구매한 상품을 포함한 모든 구매 기록을 볼 수 있으며, 수십 개의 쇼핑 빨간 봉투와 쿠폰을 무료로 받을 수 있습니다. 이제 편집자가 자세한 온라인 정보를 제공합니다. Pinduoduo 사용자는 구매한 제품 기록을 볼 수 있습니다. 1. 휴대폰을 열고 핀둬둬 아이콘을 클릭하세요.

왕의 영광은 함께 가자 꽃의 계절 이벤트를 시작했습니다. 이벤트에 참여하는 플레이어는 아바타 프레임과 다양한 선물을 무료로 받을 수 있습니다. 이 이벤트는 시간 제한이 있으며 플레이어에게 오늘 총 4개의 레벨을 제공합니다. 꽃의 계절로 가자 이벤트에 대한 가이드를 가져왔습니다. 모두가 레벨 챌린지를 완료하는 데 도움이 되기를 바랍니다. 영광의 왕의 꽃의 계절 이벤트 안내 영광의 왕의 꽃의 계절 이벤트 소개: 1. 꽃의 계절로 가는 것은 레벨을 통과하기 위해 카드를 뒤집어야 하는 활동입니다. 2. 이벤트 기간 동안 과제를 완료하고 꽃이슬을 획득하여 카드를 뒤집을 수 있습니다. 3. 활동 패널에 있는 4개의 클리어런스 카드는 모두 하나의 선(가로선, 세로선, 대각선 포함)으로 연결되어 작은 레벨을 통과합니다. 4. 레벨을 클리어할 때마다 그에 상응하는 보상을 받을 수 있으며, 친구들이 카드를 뒤집는 것을 도와주면 추가 보상도 받을 수 있습니다. 살다

방해 금지 모드에서 전화를 받는 것조차 매우 짜증나는 경험이 될 수 있습니다. 이름에서 알 수 있듯이 방해 금지 모드는 모든 수신 전화 알림과 이메일, 메시지 등의 알림을 끕니다. 다음 솔루션 세트를 따라 문제를 해결할 수 있습니다. 수정 1 – 초점 모드 활성화 휴대폰에서 초점 모드를 활성화합니다. 1단계 – 위에서 아래로 스와이프하여 제어 센터에 액세스합니다. 2단계 – 다음으로 휴대폰에서 "초점 모드"를 활성화합니다. 집중 모드는 전화기에서 방해 금지 모드를 활성화합니다. 수신 전화 알림이 전화기에 표시되지는 않습니다. 수정 2 - 초점 모드 설정 변경 초점 모드 설정에 문제가 있는 경우 이를 수정해야 합니다. 1단계 – iPhone 설정 창을 엽니다. 2단계 – 다음으로 집중 모드 설정을 켭니다.

논문 주소: https://arxiv.org/abs/2307.09283 코드 주소: https://github.com/THU-MIG/RepViTRepViT는 모바일 ViT 아키텍처에서 잘 작동하며 상당한 이점을 보여줍니다. 다음으로, 본 연구의 기여를 살펴보겠습니다. 기사에서는 경량 ViT가 일반적으로 시각적 작업에서 경량 CNN보다 더 나은 성능을 발휘한다고 언급했는데, 그 이유는 주로 모델이 전역 표현을 학습할 수 있는 MSHA(Multi-Head Self-Attention 모듈) 때문입니다. 그러나 경량 ViT와 경량 CNN 간의 아키텍처 차이점은 완전히 연구되지 않았습니다. 본 연구에서 저자는 경량 ViT를 효과적인

SpringDataJPA는 JPA 아키텍처를 기반으로 하며 매핑, ORM 및 트랜잭션 관리를 통해 데이터베이스와 상호 작용합니다. 해당 리포지토리는 CRUD 작업을 제공하고 파생 쿼리는 데이터베이스 액세스를 단순화합니다. 또한 지연 로딩을 사용하여 필요한 경우에만 데이터를 검색하므로 성능이 향상됩니다.

1. Llama3의 아키텍처 이 기사 시리즈에서는 llama3을 처음부터 구현합니다. Llama3의 전체 아키텍처: Llama3의 모델 매개변수 그림: Llama3 모델에서 이러한 매개변수의 실제 값을 살펴보겠습니다. 그림 [1] 컨텍스트 윈도우(context-window) LlaMa 클래스를 인스턴스화할 때 max_seq_len 변수는 context-window를 정의한다. 클래스에는 다른 매개변수도 있지만 이 매개변수는 변환기 모델과 가장 직접적으로 관련됩니다. 여기서 max_seq_len은 8K입니다. 그림 [2] 어휘의 크기와 주의력L

Go 프레임워크 아키텍처의 학습 곡선은 Go 언어 및 백엔드 개발에 대한 친숙도와 선택한 프레임워크의 복잡성, 즉 Go 언어의 기본 사항에 대한 올바른 이해에 따라 달라집니다. 백엔드 개발 경험이 있으면 도움이 됩니다. 다양한 복잡성의 프레임워크는 다양한 학습 곡선으로 이어집니다.

D-Day 침공 80주년이 다가오면서 한 달 동안 월드 오브 탱크 이벤트와 특별 행사가 오버로드 작전을 중심으로 진행됩니다. 새로운 PvE 모드, 테마 배틀 패스, 새로운 전선 대격돌 모드 출시 등이 포함됩니다. long 노르망디 작전 토큰 스토어가 곧 오픈됩니다. 작전 지도 6월 3일부터 6월 30일까지 노르망디 해변을 탐험하고 최대 90개의 노르망디 작전 토큰을 수집하세요. 이 지도에서 36개, 일일 임무를 완료하면 또 다른 54개입니다. 대화형 지도를 확인하고 각 이벤트의 시작 날짜를 확인한 다음 지금 토큰 획득을 시작하거나 특별 토큰 퀘스트를 잠금 해제하세요. 노르망디 작전 관련 활동에 대해 자세히 알아보려면 지도를 사용하세요. 충분한 노르망디 작전 토큰을 얻은 후 노르망디 작전 토큰 딜러에게 갈 수 있습니다.
