[扫盲]利用架构实例分析面向对象的包,多态,继承,接口,泛型

前言

     
 前内外后点Solr有一个基本上月份了,想趁机在学习Solr顺便把java拾起来。我分别就此4.X跟5.X版本在windows环境下用jetty的艺术、tomcat部署的艺术自己搭建了同将。其中起4.x到5.x以及6.x底变通仍旧一些。搭建筑起来Solr后我分别就此调用http接口的点子、SolrNet实现了目录的增删改查,在运用SolrNet开发时发现查询时的还报错,不清楚是免是以Solr的本太胜。
 在攻Solr的历程被参阅几员师傅的博客,从搭建平台、成立索引、搜索索引数据、中文分词都通晓了片,前面会拿这么些都整理出来。
随笔最终我会贴出链接。

 

正看到园子里有人问是题材,心血来潮,整理一番,希望对初学oop的装有匡助,同时出知情不对的迎接指正。

Solr搭建工作

1、下载solr windows安装包。这里我为此底是5.5.1。下载好后去掉压缩。
5.X版本中example包含多少个入门的不结构化文件:csv、json、xml。可因而post.jar命令导入以便要入门。部署之话语尽管要为此到server

     图片 1

 

2、安装tomcat8。把solr-5.5.1/server/solr-webapp文件夹下之webapp目录复制拷贝到汤姆cat/webapps文件夹内不分轩轾命名webapp目录名也solr

3、把solr-5.5.1/server/lib/ext中之jar包复制到Tomcat/webapps/solr/WEB-INF/lib目录中。

4、在任意盘符新建solr_home文件夹(我当D盘创立)。把solr-5.5.1/server/solr目录复制到solr_home下。这多少个目录也就是背后你创立索引实例Core需要采取的目。配置文件(schema.xml)和目录都封存在此处。

5、把solr-5.5.1/server/resources下之log4j.properties复制到Tomcat/webapps/solr/WEB-INF/classes目录内。如果classes不存手动创造。

6、配置web.xml。打开Tomcat/webapps/solr/WEB-INF下之web.xml。找到如下配置内容

    

<env-entry>
       <env-entry-name>solr/home</env-entry-name>
       <env-entry-value>/put/your/solr/home/here</env-entry-value>
       <env-entry-type>java.lang.String</env-entry-type>
 </env-entry>

 松手注释,并修改env-entry-value为您的solr_home地址。本身之地方是d:/solr_home/solr

 OK。保存。顺便又开下tomcat。然后在浏览器输入http://localhost:8080/solr/index.html。
刚着手自安排完后直接输入http://localhost:8080/solr 回车提醒404.
4.x安排这样是力所能及打开的,5.x须输入到index.html。 出现下图则证实您的solr
Admin UI搞定了。

  图片 2

  1. 搭实例基础准备

 创建Core

       5.x没有了默认的Core,需要团结布置。在d:/solr_home/solr创建Core目录,我起名univeral并把d:/solr_home/solr/configsets目录内之conf目录复制进去并创制data文件夹,conf放配置文件,data放索引数据(index
data)
。打开Admin UI 左侧有Core Admin。
把表单中的name和instanceDir输入univeral。 然后点击【Add Core】

图片 3

图片 4

 

倘大家召开一个粗略的有些网,需要的操作为:

小试牛刀的创设索引

    在Admin UI中采取左下方的Core
Selector找到你刚刚成立的universal实例。点击展开菜单。采用documents。

图片 5

 

    在意:当你点击【Submit
Document】按钮时碰面提醒而Field(Field)title不在,这是以您的schema.xml没安排是字段。在d:/solr_home/solr/univeral/conf下找到managed-schema(老版本是schema.xml),打开配置field字段。

图片 6

图片 7

   左侧出现Status:success则表明索引创立成功.

 

 

1.管制用户,对用户举行充实、删、改(User表)

小试牛刀的搜索

     在Solr Admin UI 左边Core实例菜单中点击Query。默认q=*:*询问任何。
solr查询利用的http
get接口。包括字段筛选、关键字查询、高亮、facet(垂直分片查询)都当get路径里输入参数。

图片 8

 

2.管理角色,对角色进行多、删、改(Role表)

总结

     
刚起摸索Solr,有广大东西弄的还未是老大掌握,前面我牵记基于.net和java将创制索引、搜索接口、中文分词这块都进行相同召开。
下边是本人学过程中参阅的博客

     http://martin3000.iteye.com/blog/1330106

     http://www.cnblogs.com/zhangweizhong/p/5044858.html

     http://blog.csdn.net/qing419925094/article/category/2357449

 

3.管理功效,对系机能拓展多、删、改(Fun表)

透过可分析,大家这略带网要的表为,User用户表,Role角色表,Fun权限表,还要派生出同样摆设表
角色-权限(RoleFun) 关联表。其中用户表里面来字段存放角色Role的ID。

图片 9

图片 10

  1. 搭建项目基础框架

一般景色下,大家且利用的是3交汇架构格局,尽管是复杂格局吗是在这基础及延伸的。

图片 11

面这幅图是极致极端基础之一个框架。总共分为5独层次,Model层,DAL层,BLL层,Tools层,UI层

  1. 代码实现基础架构

于一般的编程者来说,实现起来并无复杂,可能无碰面以这多的合计下及实例中来,那么这里我们学下,先弃开这个思想。

(1)首先每个数据库表对应一个Model类那些是必的吧,那么我们以Model层新建4单近乎,User,Role,RoleFun,Fun

(2)这一个四单对象还得数据库增、删、改操作,那么大家当DAL里面对应的制造4个像样,UserDAL,RoleDAL,RoleFunDAL,FunDAL,然后每个接近里写副相同之道,增、删、改。

       Insert(对象),Delete(对象),Update(对象)

       这里你或早已发现及题目了,hold,继续羁押。

(3)同样在BLL层要兑现对DAL的调用,需要树立平等的季独工作操作类,UserMgr,RoleMgr,RoleFunMgr,FunMgr,每个接近中实现平等的调用方法。

(4)Tools暂未考虑,重要存放时用底好像

(5)UI层,表现层,可以是Web或者Winform等形式

搭建好的代码框架如下:

图片 12

  1. 伊始OOP的剖析下–封装

面向对象的首先独特征是:封装,其实大家已落实了,分层就是包装的无限好反映,各层相互调用,“低耦合,高内聚”

此不以讲封装了。

  1. OOP–继承

透过者的代码编写而必遇见了难了,当就大家工作职能的不断追加,我们的DAL和BLL类越来越多,越来越难以管理了。

再也悲催的是,假诺每个实体类我惦记实现一个询问(Search)操作,那么要以过剩底接近里实现那些Search代码,试想这是何其的可怕,你的价全体浪费在了根基代码的编纂上。

哪化解此问题吧?

这就是说固然是运用继承的思考贯彻,父子类来兑现,一个集体的父类(BASE),所有子类继承这子类,那么子类也即有了父类的public方法,要是急需追加集体的法门,只待以父类中补充加方即可实现,所有子类自动会持续。

图片 13

格局一旦齐图所示,这样实现一个Search()方法,我们只需要变更BaseDAL类即可,而其它实体类都无欲动了。试想对多实体类的网,这完全思想是多么的首要,可以节约大量底时日。

还没有完,细心之你或发现,我们的Insert,Update,Delete都要自己之Model呀,这BaseDAL应该如何促成吗?怎么精通具体的计去调用具体的Model呢?

哈哈,这里C#指出了引以为豪的“泛型”思想。通过泛型,可以轻松的缓解者题材。

  1. 泛型

对于BaseDAL大家得计划改为泛型的类似,在动该类的早晚要拿此类具体的实例化,看代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DAL
{
    public class BaseDAL<T> where T:new ()
    {
        public bool Insert(T t)
        {
            //TODO 解析T,通过反向工程构造SQL
            return true;
        }

        public bool Update(T t)
        {
            //TODO 解析T,通过反向工程构造SQL
            return true;
        }

        public bool Delete(T t)
        {
            //TODO 解析T,通过反向工程构造SQL
            return true;
        }
    }
}

 这样,我们其它类似可一直接轨父类了。但为全体架构的可是塑行,大家DAL层将非做对BaseDAL的延续操作,原因特别简单,因为我们或许会合切换DAL的技艺,例如由ADO.Net切换成HNibernate等,同时DAL作为数据操作层尽量使保持简约。

俺们这里在工作逻辑层BLL来促成持续,同样也需一个BaseBLL的基类。

 

using DAL;
using System.Collections;
using System.Collections.Generic;

namespace BLL
{
    public class BaseMgr<T> where T : new()
    {
        //可以重写
        public virtual bool Insert(T t)
        {
            return new BaseDAL<T>().Insert(t);
        }

        public bool Update(T t)
        {
            return new BaseDAL<T>().Update(t);
        }

        public bool Delete(T t)
        {
            return new BaseDAL<T>().Delete(t);
        }
        //重载
        public bool Delete(List<T> list)
        {
            return true;
        }
    }
}

 

下一场实际的实业类继承这一个BaseMgr

using Model;

namespace BLL
{
    public class UserMgr : BaseMgr<User> //继承
    {
        //继承基类最大的好处是,可以写本类自己的特有方法
        //例如User,我想获取所有的用户,而其他的业务逻辑不需要实现这个方法,
        //那么我们可以单独写在这个类里面
        //当然你也可以写在BaseMgr里面,哪样所有的子类都具有这个方法了

        //可以对基类进行重写(多态)
        public override bool Insert(User t)
        {
            return true;
        }

        //继承基类前的代码
        //public bool Insert(User t)
        //{
        //    return new UserDAL().Insert(t);
        //}

        //public bool Delete(User t)
        //{
        //    return new UserDAL().Delete(t);
        //}

        //public bool Update(User t)
        //{
        //    return new UserDAL().Update(t);
        //}


    }
}

 

透过泛型实现连续我们得的最为酷益处:

1,数据库每多一个实体,代码的Model层只需要加一个遥相呼应之实体类,那么该类的底子操作就暴发了(即,BaseDAL类的兼具方)

2,通过当业务层对基类的继承,可以兑现特有方法,当然并无是有的实体类都需后续,具体看自己之要求

  1. OOP-多态

多态性(polymorphisn)是允许你以叔伯对象设置成同一个要么重复多的外的子对象等的技术,赋值之后,父对象就是足以遵照当前赋值给她的支行对象的特点以不同的点子运行。简单的游说,就是同一句话:允许将子类类型的指针赋值给父类类型的指针。

落实多态,有次栽格局,覆盖,重载。

覆盖:override,下边代码UserMgr类中的Insert方法就是是为此的挂情势,可以还写父类的少数方法来达到自己之政工要求。一定要留意将同意再写的办法事先申明也virtual

重载:通俗点就是一个形式名,不同的参数类型,例如我惦念实现一个批量剔除效用,方法的名一样想起名吧Delete,那么就需要转移参数即可

         public bool Delete(List<T>
listT);

 

  1. 接口

顾名思义,接口,即插即用,例如插座,只要有针对性许插头,插入即可使用了。

接口:在编程里面由至的凡同样种标准,既然是标准,必定是封锁若干人数的,也即是团队开发品种,我们齐按一个专业,协调出代码,而且互不困扰。

接口更多之凡为软件架构师使用,设计好全部的软件架构,间接交给程序员开发即可,程序员只需要依照这种专业做就是足以了,对每个接口举办具体的贯彻。

只顾啊:接口不实现,是可以经过编译的哦

 

  1. 引申架构

由此使用地点的思想,基本上我们可以兑现均等法牢固的架了,而且好复用到另外的网受。

然技术是当相连除旧布新的,而且要求也是持续变化的,更可怕的是能运转系列的设施越多了,从PC到通常手机,再到智能手机(Android,IOS,WP7),再至机械总结机等等。

还有语言的距离,Java,php等等

眼看就要求一律效仿架构不但要稳步,更能适用于各类平台的开。

啊是我们的架可以引申成一个劳动,将方的架在长一个服务层(可以用WCF,可以用MVC4的WebAPI,Restful规范),那么全体的架就是下这个样子了。

图片 14

 

  1. 总结

软件开发其实就是是平等种沉思,将丁之平等栽思维通过代码模式反映出。好好用思想考,你就亮为什么会这么做,仔细回味其中的妙处。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图