service层构想

创建service层 将业务逻辑及判断 放到service层

1.创建service层

(1)让CI能够加载service,service目录放在application下,因为CI系统没有service,则在application/core下新建扩展MY_Service.php

class MY_Service
{

public function __construct()
{
    log_message('debug', "Service Class Initialized");
}
function __get($key)
{
    $CI = & get_instance();
    return $CI->$key;
}
}

2.扩展CI_Loader实现,加载service,在application/core下新建 MY_Loader.php文件:

class MY_Loader extends CI_Loader
{


 protected $_ci_services = array();
   /**
   * List of paths to load sercices from
    *
   * @var array
   * @access protected
   */
protected $_ci_service_paths  = array();

/**
 * Constructor
 * 
 * Set the path to the Service files
 */

public function __construct()
{
    parent::__construct();
    $this->_ci_service_paths = array(APPPATH);
}

/**
 * Service Loader
 * 
 * This function lets users load and instantiate classes.
* It is designed to be called from a user's app controllers.
*
* @param string the name of the class
* @param mixed the optional parameters
* @param string an optional object name
* @return void
 */
 
public function service($service = '', $params = NULL, $object_name = NULL)
{
    if(is_array($service))
    {
        foreach($service as $class)
        {
            $this->service($class, $params);
        }
        return;
    }
    if($service == '' or isset($this->_ci_services[$service])) {
        return FALSE;
    }
    if(! is_null($params) && ! is_array($params)) {
        $params = NULL;
    }
    $subdir = '';
    // Is the service in a sub-folder? If so, parse out the filename and path.
    if (($last_slash = strrpos($service, '/')) !== FALSE)
    {
            // The path is in front of the last slash
            $subdir = substr($service, 0, $last_slash + 1);
            // And the service name behind it
            $service = substr($service, $last_slash + 1);
    }
    foreach($this->_ci_service_paths as $path)
    {
        $filepath = $path .'service/'.$subdir.$service.'.php';
        if ( ! file_exists($filepath))
        {
            continue;
        }
        include_once($filepath);
        $service = strtolower($service);
        if (empty($object_name))
        {
            $object_name = $service;
        }
        $service = ucfirst($service);
        $CI = &get_instance();
        if($params !== NULL)
        {
            $CI->$object_name = new $service($params);
        }
        else
        {
            $CI->$object_name = new $service();
        }
        $this->_ci_services[] = $object_name;
        return;
    }
}
}

3简单例子实现:控制器中调用service :

  <?php
 class User extends CI_Controller
 {
     public function __construct() 
     {

         parent::__construct();
          $this->load->service('user_service');
	}
  public function login()
  {
     $name = 'phpddt.com';
	    $psw = 'password';
	    print_r($this->user_service->login($name, $psw));
  }
}
  1. service中调用model :

     <?php
     	class User_service extends MY_Service
     	{
     		   public function __construct()
     		  {
     		        parent::__construct();
     			    $this->load->model('user_model');
     		  }
     		  public function login($name, $password)
     	   {
     		     $user = $this->user_model->get_user_by_where($name, $password);
    
     			  return $user;
     		 }
     }
    
  2. model中你只跟db打交道:

    <?php
    	class User_model extends CI_Model
    	{
    		 public function __construct()
    		  {
    		   		parent::__construct();
    		  }
    		public function get_user_by_where($name, $password)
    		  {
    		    	 //$this->db
    		
    			 return array('id' => 1, 'name' => 'mckee');
    		  }
    	}
    

    参考网址https://www.cnblogs.com/hellowzd/p/4674666.html

### 前端开发的重点与难点分析 #### 1. 基础积累 前端开发的基础主要包括 HTML、CSS 和 JavaScript,三者构成了网页的结构、样式和交互逻辑。随着框架(如 React、Vue、Angular)的普及,开发者需要深入理解其核心机制,例如虚拟 DOM、组件化设计、响应式系统等[^1]。此外,ES6+ 的特性(如 Promise、async/await、模块化语法)已成为现代前端开发的标准,掌握这些内容是构建高性能应用的前提。 #### 2. JSON 格式处理 JSON 是前后端通信的核心数据格式,开发者需熟练进行序列化、反序列化、嵌套解析及错误处理。在实际开发中,常使用 `JSON.parse()` 和 `JSON.stringify()` 进行转换,并结合 Axios 或 Fetch API 实现异步请求。针对复杂数据结构,可以借助 TypeScript 接口定义或 JSON Schema 来确保数据完整性。 #### 3. 控件重构 控件重构涉及组件的设计与复用性优化。以 Vue.js 为例,通过 props 和 slots 可实现高度可配置的组件,同时利用 Mixins 或 Composition API 提升逻辑复用能力。重构过程中需要注意组件的单一职责原则、可测试性以及性能优化(如避免不必要的 re-render)。 #### 4. 分辨率适配 分辨率适配主要解决不同设备下页面显示一致性问题。常见方案包括: - **视口设置**:通过 `<meta name="viewport">` 设置理想视口。 - **REM 适配**:动态计算根字体大小,使布局单位与屏幕宽度成比例。 - **vw/vh 单位**:直接基于视口宽度或高度进行布局。 - **媒体查询与 Flex/Grid 布局**:实现响应式断点控制与弹性排版。 #### 5. 样式管理 CSS 管理方式经历了从全局样式到模块化、CSS-in-JS 的演变。主流做法包括: - **CSS Modules**:局部作用域防止命名冲突。 - **Tailwind CSS / Bootstrap**:实用类驱动开发,提升效率。 - **CSS-in-JS**(如 styled-components):样式与组件绑定,增强封装性。 #### 6. 样式穿透机制 在使用 scoped 样式时(如 Vue 的 `scoped` 属性),默认情况下样式不会影响子组件。若需穿透,可通过以下方式实现: ```css /* Vue 中穿透 scoped 样式 */ :deep(.child-class) { color: red; } ``` 或使用 `::v-deep`、`:global()` 等伪类进行控制。 #### 7. 基础数据缓存及刷新性能优化 前端缓存策略包括 LocalStorage、SessionStorage、IndexedDB 以及 Service Workers。对于频繁请求的数据,可采用本地缓存 + 时间戳比对的方式减少网络开销。刷新性能方面,可以通过防抖(debounce)、节流(throttle)、懒加载(lazy loading)等方式优化用户体验,同时结合骨架屏和预加载技术提升首屏速度。 ### AI 在前端开发中的潜在影响 AI 正逐步渗透进前端开发流程,主要体现在以下几个方面: - **代码生成与补全**:如 GitHub Copilot 能根据上下文自动生成函数体、HTML 结构或 CSS 样式,显著提升编码效率。 - **自动化测试与调试**:AI 可模拟用户行为生成测试用例,识别异常状态并提供修复建议。 - **UI 设计辅助**:工具如 Figma 插件已能基于描述生成 UI 界面草图,甚至将手绘稿自动转化为可运行的代码。 - **语义化开发**:未来可能实现通过自然语言描述功能,由 AI 自动构建完整前端页面结构。 - **性能调优建议**:AI 可分析页面加载路径,推荐最优资源加载顺序、图片压缩策略等。 尽管 AI 技术尚未完全替代人工开发,但其在重复性任务、快速原型构建等方面展现出巨大潜力,有助于开发者专注于更高次的架构设计与用户体验优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值