部落格

  • 500萬一台的勞斯萊斯SUV要來了 有什麼吸引土豪的新配方?

    500萬一台的勞斯萊斯SUV要來了 有什麼吸引土豪的新配方?

    少於四百萬的話,對於這個級別的SUV來說,可能都算得上是便宜的了。

    現在市面上售價最昂貴的SUV車型是賓利添越,398-480萬的售價可謂之天價,如此高昂的售價不僅僅是普通人可望不可及,也會讓眾多傳統意義上的豪華品牌SUV在賓利添越面前顯得黯然失色。

    而玩豪華玩奢侈的汽車品牌不僅僅只有賓利一家,汽車業界著名的奢華品牌勞斯萊斯近日公布了兩張路試諜照,而主角正是可能成為勞斯萊斯旗下首款SUV車型,——項目代號Cullinan。

    首先要說明的是,Culinan並不是該款SUV正式的名稱,而是勞斯萊斯品牌開發SUV車型項目的代號,該款車型具體名稱暫時不得而知。

    從諜照中可以看出,儘管車身上覆蓋著厚重的偽裝,但是前臉是類似現在勞斯萊斯家族式設計,依然是靈感源自帕提農神廟的直瀑式進氣格柵,其他細節處設計暫未公布,但是不妨來看看國外媒體所曝光的渲染圖。

    這些圖片僅僅是假想圖,真實程度並不高,但我們不妨可以做一個猜想,在賓利添越配備6.0T W12渦輪增壓發動機的前提下,作為與賓利添越抗衡的一款奢華級SUV,勞斯萊斯SUV也將會匹配一款12缸數的渦輪增壓引擎。

    【賓利添越的W12發動機】

    而賓利添越作為一款奢華級的SUV,在道路適應性方面同樣有着出色的性能表現,如此,也可以確定勞斯萊斯SUV將會在全球多種地區、多種複雜路況下對其進行嚴苛性較強的測試,以致力於生產出一款性能卓越的車型。

    全文總結:無論是勞斯萊斯SUV還是賓利添越,用四五百萬去買一台汽車對於普羅大眾來說終究不太現實,但是作為愛車人士,看看熱鬧過過眼癮也是不錯的選擇,根據目前公布的路試諜照推測,如果進度正常,這款SUV將有可能在2018年左右發布,至於售價嘛……少於四百萬的話,對於這個級別的SUV來說,可能都算得上是便宜的了……本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

    網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

    ※想知道最厲害的網頁設計公司"嚨底家"!

    ※別再煩惱如何寫文案,掌握八大原則!

    ※產品缺大量曝光嗎?你需要的是一流包裝設計!

    ※回頭車貨運收費標準

    台中搬家公司費用怎麼算?

  • 基於 abp vNext 和 .NET Core 開發博客項目 – 博客接口實戰篇(五)

    基於 abp vNext 和 .NET Core 開發博客項目 – 博客接口實戰篇(五)

    系列文章

    1. 基於 abp vNext 和 .NET Core 開發博客項目 – 使用 abp cli 搭建項目
    2. 基於 abp vNext 和 .NET Core 開發博客項目 – 給項目瘦身,讓它跑起來
    3. 基於 abp vNext 和 .NET Core 開發博客項目 – 完善與美化,Swagger登場
    4. 基於 abp vNext 和 .NET Core 開發博客項目 – 數據訪問和代碼優先
    5. 基於 abp vNext 和 .NET Core 開發博客項目 – 自定義倉儲之增刪改查
    6. 基於 abp vNext 和 .NET Core 開發博客項目 – 統一規範API,包裝返回模型
    7. 基於 abp vNext 和 .NET Core 開發博客項目 – 再說Swagger,分組、描述、小綠鎖
    8. 基於 abp vNext 和 .NET Core 開發博客項目 – 接入GitHub,用JWT保護你的API
    9. 基於 abp vNext 和 .NET Core 開發博客項目 – 異常處理和日誌記錄
    10. 基於 abp vNext 和 .NET Core 開發博客項目 – 使用Redis緩存數據
    11. 基於 abp vNext 和 .NET Core 開發博客項目 – 集成Hangfire實現定時任務處理
    12. 基於 abp vNext 和 .NET Core 開發博客項目 – 用AutoMapper搞定對象映射
    13. 基於 abp vNext 和 .NET Core 開發博客項目 – 定時任務最佳實戰(一)
    14. 基於 abp vNext 和 .NET Core 開發博客項目 – 定時任務最佳實戰(二)
    15. 基於 abp vNext 和 .NET Core 開發博客項目 – 定時任務最佳實戰(三)
    16. 基於 abp vNext 和 .NET Core 開發博客項目 – 博客接口實戰篇(一)
    17. 基於 abp vNext 和 .NET Core 開發博客項目 – 博客接口實戰篇(二)
    18. 基於 abp vNext 和 .NET Core 開發博客項目 – 博客接口實戰篇(三)
    19. 基於 abp vNext 和 .NET Core 開發博客項目 – 博客接口實戰篇(四)

    上篇文章完成了文章詳情頁數據查詢和清除緩存的功能。

    本篇繼續完成分類、標籤、友情鏈接的後台操作接口,還是那句話,這些純CRUD的內容,建議還是自己動手完成比較好,本篇將不再啰嗦,直接貼代碼,以供參考。

    分類

    添加接口:查詢分類列表QueryCategoriesForAdminAsync()、新增分類InsertCategoryAsync(...)、更新分類UpdateCategoryAsync(...)、刪除分類DeleteCategoryAsync(...)

    #region Categories
    
    /// <summary>
    /// 查詢分類列表
    /// </summary>
    /// <returns></returns>
    Task<ServiceResult<IEnumerable<QueryCategoryForAdminDto>>> QueryCategoriesForAdminAsync();
    
    /// <summary>
    /// 新增分類
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task<ServiceResult> InsertCategoryAsync(EditCategoryInput input);
    
    /// <summary>
    /// 更新分類
    /// </summary>
    /// <param name="id"></param>
    /// <param name="input"></param>
    /// <returns></returns>
    Task<ServiceResult> UpdateCategoryAsync(int id, EditCategoryInput input);
    
    /// <summary>
    /// 刪除分類
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    Task<ServiceResult> DeleteCategoryAsync(int id);
    
    #endregion Categories
    

    查詢分類列表需要返回的模型類QueryCategoryForAdminDto.cs

    //QueryCategoryForAdminDto.cs
    namespace Meowv.Blog.Application.Contracts.Blog
    {
        public class QueryCategoryForAdminDto : QueryCategoryDto
        {
            /// <summary>
            /// 主鍵
            /// </summary>
            public int Id { get; set; }
        }
    }
    

    新增分類和更新分類需要的輸入參數EditCategoryInput.cs,直接繼承CategoryDto即可。

    //EditCategoryInput.cs
    namespace Meowv.Blog.Application.Contracts.Blog.Params
    {
        public class EditCategoryInput : CategoryDto
        {
        }
    }
    

    分別實現這幾個接口。

    /// <summary>
    /// 查詢分類列表
    /// </summary>
    /// <returns></returns>
    public async Task<ServiceResult<IEnumerable<QueryCategoryForAdminDto>>> QueryCategoriesForAdminAsync()
    {
        var result = new ServiceResult<IEnumerable<QueryCategoryForAdminDto>>();
    
        var posts = await _postRepository.GetListAsync();
    
        var categories = _categoryRepository.GetListAsync().Result.Select(x => new QueryCategoryForAdminDto
        {
            Id = x.Id,
            CategoryName = x.CategoryName,
            DisplayName = x.DisplayName,
            Count = posts.Count(p => p.CategoryId == x.Id)
        });
    
        result.IsSuccess(categories);
        return result;
    }
    
    /// <summary>
    /// 新增分類
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    public async Task<ServiceResult> InsertCategoryAsync(EditCategoryInput input)
    {
        var result = new ServiceResult();
    
        var category = ObjectMapper.Map<EditCategoryInput, Category>(input);
        await _categoryRepository.InsertAsync(category);
    
        result.IsSuccess(ResponseText.INSERT_SUCCESS);
        return result;
    }
    

    這裏需要一條AutoMapper配置,將EditCategoryInput轉換為Category,忽略Id字段。

    CreateMap<EditCategoryInput, Category>().ForMember(x => x.Id, opt => opt.Ignore());
    
    /// <summary>
    /// 更新分類
    /// </summary>
    /// <param name="id"></param>
    /// <param name="input"></param>
    /// <returns></returns>
    public async Task<ServiceResult> UpdateCategoryAsync(int id, EditCategoryInput input)
    {
        var result = new ServiceResult();
    
        var category = await _categoryRepository.GetAsync(id);
        category.CategoryName = input.CategoryName;
        category.DisplayName = input.DisplayName;
    
        await _categoryRepository.UpdateAsync(category);
    
        result.IsSuccess(ResponseText.UPDATE_SUCCESS);
        return result;
    }
    
    /// <summary>
    /// 刪除分類
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    public async Task<ServiceResult> DeleteCategoryAsync(int id)
    {
        var result = new ServiceResult();
    
        var category = await _categoryRepository.FindAsync(id);
        if (null == category)
        {
            result.IsFailed(ResponseText.WHAT_NOT_EXIST.FormatWith("Id", id));
            return result;
        }
    
        await _categoryRepository.DeleteAsync(id);
    
        result.IsSuccess(ResponseText.DELETE_SUCCESS);
        return result;
    }
    

    BlogController.Admin.cs中添加接口。

    #region Categories
    
    /// <summary>
    /// 查詢分類列表
    /// </summary>
    /// <returns></returns>
    [HttpGet]
    [Authorize]
    [Route("admin/categories")]
    [ApiExplorerSettings(GroupName = Grouping.GroupName_v2)]
    public async Task<ServiceResult<IEnumerable<QueryCategoryForAdminDto>>> QueryCategoriesForAdminAsync()
    {
        return await _blogService.QueryCategoriesForAdminAsync();
    }
    
    /// <summary>
    /// 新增分類
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [HttpPost]
    [Authorize]
    [Route("category")]
    [ApiExplorerSettings(GroupName = Grouping.GroupName_v2)]
    public async Task<ServiceResult> InsertCategoryAsync([FromBody] EditCategoryInput input)
    {
        return await _blogService.InsertCategoryAsync(input);
    }
    
    /// <summary>
    /// 更新分類
    /// </summary>
    /// <param name="id"></param>
    /// <param name="input"></param>
    /// <returns></returns>
    [HttpPut]
    [Authorize]
    [Route("category")]
    [ApiExplorerSettings(GroupName = Grouping.GroupName_v2)]
    public async Task<ServiceResult> UpdateCategoryAsync([Required] int id, [FromBody] EditCategoryInput input)
    {
        return await _blogService.UpdateCategoryAsync(id, input);
    }
    
    /// <summary>
    /// 刪除分類
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    [HttpDelete]
    [Authorize]
    [Route("category")]
    [ApiExplorerSettings(GroupName = Grouping.GroupName_v2)]
    public async Task<ServiceResult> DeleteCategoryAsync([Required] int id)
    {
        return await _blogService.DeleteCategoryAsync(id);
    }
    
    #endregion Categories
    

    標籤

    添加接口:查詢標籤列表QueryTagsForAdminAsync()、新增標籤InsertTagAsync(...)、更新標籤UpdateTagAsync(...)、刪除標籤DeleteTagAsync(...)

    #region Tags
    
    /// <summary>
    /// 查詢標籤列表
    /// </summary>
    /// <returns></returns>
    Task<ServiceResult<IEnumerable<QueryTagForAdminDto>>> QueryTagsForAdminAsync();
    
    /// <summary>
    /// 新增標籤
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task<ServiceResult> InsertTagAsync(EditTagInput input);
    
    /// <summary>
    /// 更新標籤
    /// </summary>
    /// <param name="id"></param>
    /// <param name="input"></param>
    /// <returns></returns>
    Task<ServiceResult> UpdateTagAsync(int id, EditTagInput input);
    
    /// <summary>
    /// 刪除標籤
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    Task<ServiceResult> DeleteTagAsync(int id);
    
    #endregion Tags
    

    查詢標籤列表需要返回的模型類QueryTagForAdminDto.cs

    //QueryTagForAdminDto.cs
    namespace Meowv.Blog.Application.Contracts.Blog
    {
        public class QueryTagForAdminDto : QueryTagDto
        {
            /// <summary>
            /// 主鍵
            /// </summary>
            public int Id { get; set; }
        }
    }
    

    新增標籤和更新標籤需要的輸入參數EditTagInput.cs,直接繼承TagDto即可。

    //EditTagInput.cs
    namespace Meowv.Blog.Application.Contracts.Blog.Params
    {
        public class EditTagInput : TagDto
        {
        }
    }
    

    分別實現這幾個接口。

    /// <summary>
    /// 查詢標籤列表
    /// </summary>
    /// <returns></returns>
    public async Task<ServiceResult<IEnumerable<QueryTagForAdminDto>>> QueryTagsForAdminAsync()
    {
        var result = new ServiceResult<IEnumerable<QueryTagForAdminDto>>();
    
        var post_tags = await _postTagRepository.GetListAsync();
    
        var tags = _tagRepository.GetListAsync().Result.Select(x => new QueryTagForAdminDto
        {
            Id = x.Id,
            TagName = x.TagName,
            DisplayName = x.DisplayName,
            Count = post_tags.Count(p => p.TagId == x.Id)
        });
    
        result.IsSuccess(tags);
        return result;
    }
    
    /// <summary>
    /// 新增標籤
    /// </summary>
    /// <param name="dto"></param>
    /// <returns></returns>
    public async Task<ServiceResult> InsertTagAsync(EditTagInput input)
    {
        var result = new ServiceResult();
    
        var tag = ObjectMapper.Map<EditTagInput, Tag>(input);
        await _tagRepository.InsertAsync(tag);
    
        result.IsSuccess(ResponseText.INSERT_SUCCESS);
        return result;
    }
    

    這裏需要一條AutoMapper配置,將EditCategoryInput轉換為Tag,忽略Id字段。

    CreateMap<EditTagInput, Tag>().ForMember(x => x.Id, opt => opt.Ignore());
    
    /// <summary>
    /// 更新標籤
    /// </summary>
    /// <param name="id"></param>
    /// <param name="dto"></param>
    /// <returns></returns>
    public async Task<ServiceResult> UpdateTagAsync(int id, EditTagInput input)
    {
        var result = new ServiceResult();
    
        var tag = await _tagRepository.GetAsync(id);
        tag.TagName = input.TagName;
        tag.DisplayName = input.DisplayName;
    
        await _tagRepository.UpdateAsync(tag);
    
        result.IsSuccess(ResponseText.UPDATE_SUCCESS);
        return result;
    }
    
    /// <summary>
    /// 刪除標籤
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    public async Task<ServiceResult> DeleteTagAsync(int id)
    {
        var result = new ServiceResult();
    
        var tag = await _tagRepository.FindAsync(id);
        if (null == tag)
        {
            result.IsFailed(ResponseText.WHAT_NOT_EXIST.FormatWith("Id", id));
            return result;
        }
    
        await _tagRepository.DeleteAsync(id);
        await _postTagRepository.DeleteAsync(x => x.TagId == id);
    
        result.IsSuccess(ResponseText.DELETE_SUCCESS);
        return result;
    }
    

    BlogController.Admin.cs中添加接口。

    #region Tags
    
    /// <summary>
    /// 查詢標籤列表
    /// </summary>
    /// <returns></returns>
    [HttpGet]
    [Authorize]
    [Route("admin/tags")]
    [ApiExplorerSettings(GroupName = Grouping.GroupName_v2)]
    public async Task<ServiceResult<IEnumerable<QueryTagForAdminDto>>> QueryTagsForAdminAsync()
    {
        return await _blogService.QueryTagsForAdminAsync();
    }
    
    /// <summary>
    /// 新增標籤
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [HttpPost]
    [Authorize]
    [Route("tag")]
    [ApiExplorerSettings(GroupName = Grouping.GroupName_v2)]
    public async Task<ServiceResult> InsertTagAsync([FromBody] EditTagInput input)
    {
        return await _blogService.InsertTagAsync(input);
    }
    
    /// <summary>
    /// 更新標籤
    /// </summary>
    /// <param name="id"></param>
    /// <param name="input"></param>
    /// <returns></returns>
    [HttpPut]
    [Authorize]
    [Route("tag")]
    [ApiExplorerSettings(GroupName = Grouping.GroupName_v2)]
    public async Task<ServiceResult> UpdateTagAsync([Required] int id, [FromBody] EditTagInput input)
    {
        return await _blogService.UpdateTagAsync(id, input);
    }
    
    /// <summary>
    /// 刪除標籤
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    [HttpDelete]
    [Authorize]
    [Route("tag")]
    [ApiExplorerSettings(GroupName = Grouping.GroupName_v2)]
    public async Task<ServiceResult> DeleteTagAsync([Required] int id)
    {
        return await _blogService.DeleteTagAsync(id);
    }
    
    #endregion Tags
    

    友鏈

    添加接口:查詢友鏈列表QueryFriendLinksForAdminAsync()、新增友鏈InsertFriendLinkAsync(...)、更新友鏈UpdateFriendLinkAsync(...)、刪除友鏈DeleteFriendLinkAsync(...)

    #region FriendLinks
    
    /// <summary>
    /// 查詢友鏈列表
    /// </summary>
    /// <returns></returns>
    Task<ServiceResult<IEnumerable<QueryFriendLinkForAdminDto>>> QueryFriendLinksForAdminAsync();
    
    /// <summary>
    /// 新增友鏈
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task<ServiceResult> InsertFriendLinkAsync(EditFriendLinkInput input);
    
    /// <summary>
    /// 更新友鏈
    /// </summary>
    /// <param name="id"></param>
    /// <param name="input"></param>
    /// <returns></returns>
    Task<ServiceResult> UpdateFriendLinkAsync(int id, EditFriendLinkInput input);
    
    /// <summary>
    /// 刪除友鏈
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    Task<ServiceResult> DeleteFriendLinkAsync(int id);
    
    #endregion FriendLinks
    

    查詢友鏈列表需要返回的模型類QueryFriendLinkForAdminDto.cs

    //QueryFriendLinkForAdminDto.cs
    namespace Meowv.Blog.Application.Contracts.Blog
    {
        public class QueryFriendLinkForAdminDto : FriendLinkDto
        {
            /// <summary>
            /// 主鍵
            /// </summary>
            public int Id { get; set; }
        }
    }
    

    新增友鏈和更新友鏈需要的輸入參數EditFriendLinkInput.cs,直接繼承FriendLinkDto即可。

    //EditFriendLinkInput .cs
    namespace Meowv.Blog.Application.Contracts.Blog.Params
    {
        public class EditFriendLinkInput : FriendLinkDto
        {
        }
    }
    

    分別實現這幾個接口。

    /// <summary>
    /// 查詢友鏈列表
    /// </summary>
    /// <returns></returns>
    public async Task<ServiceResult<IEnumerable<QueryFriendLinkForAdminDto>>> QueryFriendLinksForAdminAsync()
    {
        var result = new ServiceResult<IEnumerable<QueryFriendLinkForAdminDto>>();
    
        var friendLinks = await _friendLinksRepository.GetListAsync();
    
        var dto = ObjectMapper.Map<List<FriendLink>, IEnumerable<QueryFriendLinkForAdminDto>>(friendLinks);
    
        result.IsSuccess(dto);
        return result;
    }
    
    /// <summary>
    /// 新增友鏈
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    public async Task<ServiceResult> InsertFriendLinkAsync(EditFriendLinkInput input)
    {
        var result = new ServiceResult();
    
        var friendLink = ObjectMapper.Map<EditFriendLinkInput, FriendLink>(input);
        await _friendLinksRepository.InsertAsync(friendLink);
    
        // 執行清除緩存操作
        await _blogCacheService.RemoveAsync(CachePrefix.Blog_FriendLink);
    
        result.IsSuccess(ResponseText.INSERT_SUCCESS);
        return result;
    }
    
    /// <summary>
    /// 更新友鏈
    /// </summary>
    /// <param name="id"></param>
    /// <param name="input"></param>
    /// <returns></returns>
    public async Task<ServiceResult> UpdateFriendLinkAsync(int id, EditFriendLinkInput input)
    {
        var result = new ServiceResult();
    
        var friendLink = await _friendLinksRepository.GetAsync(id);
        friendLink.Title = input.Title;
        friendLink.LinkUrl = input.LinkUrl;
    
        await _friendLinksRepository.UpdateAsync(friendLink);
    
        // 執行清除緩存操作
        await _blogCacheService.RemoveAsync(CachePrefix.Blog_FriendLink);
    
        result.IsSuccess(ResponseText.UPDATE_SUCCESS);
        return result;
    }
    
    /// <summary>
    /// 刪除友鏈
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    public async Task<ServiceResult> DeleteFriendLinkAsync(int id)
    {
        var result = new ServiceResult();
    
        var friendLink = await _friendLinksRepository.FindAsync(id);
        if (null == friendLink)
        {
            result.IsFailed(ResponseText.WHAT_NOT_EXIST.FormatWith("Id", id));
            return result;
        }
    
        await _friendLinksRepository.DeleteAsync(id);
    
        // 執行清除緩存操作
        await _blogCacheService.RemoveAsync(CachePrefix.Blog_FriendLink);
    
        result.IsSuccess(ResponseText.DELETE_SUCCESS);
        return result;
    }
    

    其中查詢友鏈列表和新增友鏈中有兩條AutoMapper配置。

    CreateMap<FriendLink, QueryFriendLinkForAdminDto>();
    
    CreateMap<EditFriendLinkInput, FriendLink>().ForMember(x => x.Id, opt => opt.Ignore());
    

    BlogController.Admin.cs中添加接口。

    #region FriendLinks
    
    /// <summary>
    /// 查詢友鏈列表
    /// </summary>
    /// <returns></returns>
    [HttpGet]
    [Authorize]
    [Route("admin/friendlinks")]
    [ApiExplorerSettings(GroupName = Grouping.GroupName_v2)]
    public async Task<ServiceResult<IEnumerable<QueryFriendLinkForAdminDto>>> QueryFriendLinksForAdminAsync()
    {
        return await _blogService.QueryFriendLinksForAdminAsync();
    }
    
    /// <summary>
    /// 新增友鏈
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [HttpPost]
    [Authorize]
    [Route("friendlink")]
    [ApiExplorerSettings(GroupName = Grouping.GroupName_v2)]
    public async Task<ServiceResult> InsertFriendLinkAsync([FromBody] EditFriendLinkInput input)
    {
        return await _blogService.InsertFriendLinkAsync(input);
    }
    
    /// <summary>
    /// 更新友鏈
    /// </summary>
    /// <param name="id"></param>
    /// <param name="input"></param>
    /// <returns></returns>
    [HttpPut]
    [Authorize]
    [Route("friendlink")]
    [ApiExplorerSettings(GroupName = Grouping.GroupName_v2)]
    public async Task<ServiceResult> UpdateFriendLinkAsync([Required] int id, [FromBody] EditFriendLinkInput input)
    {
        return await _blogService.UpdateFriendLinkAsync(id, input);
    }
    
    /// <summary>
    /// 刪除友鏈
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    [HttpDelete]
    [Authorize]
    [Route("friendlink")]
    [ApiExplorerSettings(GroupName = Grouping.GroupName_v2)]
    public async Task<ServiceResult> DeleteFriendLinkAsync([Required] int id)
    {
        return await _blogService.DeleteFriendLinkAsync(id);
    }
    
    #endregion
    

    Next

    截止本篇,基於 abp vNext 和 .NET Core 開發博客項目 系列的後台API部分便全部開發完成了。

    本博客項目系列是我一邊寫代碼一邊記錄后的成果,並不是開發完成后再拿出來寫的,涉及到東西也不是很多,對於新手入門來說應該是夠了的,如果你從中有所收穫請多多轉發分享。

    在此,希望大家可以關注一下我的微信公眾號:『阿星Plus』,文章將會首發在公眾號中。

    現在有了API,大家可以選擇自己熟悉的方式去開發前端界面,比如目前我博客的線上版本就是用的 ASP.NET Core Web ,感興趣的可以去 release 分支查看。

    關於前端部分,看到有人呼籲vue,說實話前端技術不是很厲害,本職主要是後端開發,可能達不到預期效果。

    所以我準備入坑 Blazor ,接下來就現學現賣吧,一起學習一起做項目一起進步,加油

    開源地址:https://github.com/Meowv/Blog/tree/blog_tutorial

    搭配下方課程學習更佳 ↓ ↓ ↓

    http://gk.link/a/10iQ7

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    網頁設計最專業,超強功能平台可客製化

    ※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

    ※回頭車貨運收費標準

    ※推薦評價好的iphone維修中心

    ※教你寫出一流的銷售文案?

    台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

    台中搬家公司費用怎麼算?

  • 手把手帶你入門numpy,從此數據處理不再慌【四】

    手把手帶你入門numpy,從此數據處理不再慌【四】

    本文始發於個人公眾號:TechFlow,原創不易,求個關注

    今天是numpy專題的第四篇文章,numpy中的數組重塑與三元表達式。

    首先我們來看數組重塑,所謂的重塑本質上就是改變數組的shape。在保證數組當中所有元素不變的前提下,變更數組形狀的操作。比如常用的操作主要有兩個,一個是轉置,另外一個是reshape。

    轉置與reshape

    轉置操作很簡單,它對應線性代數當中的轉置矩陣這個概念,也就是說它的功能就是將一個矩陣進行轉置

    轉置矩陣的定義是將一個矩陣的橫行寫為轉置矩陣的縱列,把縱列寫成轉置矩陣的橫行。這個定義的是二維的矩陣,本質上來說,轉置操作其實是將一個矩陣沿着矩陣的大對角線進行翻轉。翻轉之後,顯然這個矩陣的各個維度都會發生變化。

    其中二維的矩陣最直觀,一個4 x 3的矩陣,轉置之後得到的是3 x 4的矩陣。如果維度更多呢?如果是3 x 2 x 4的矩陣轉置之後會得到什麼?

    很簡單,得到的會是4 x 2 x 3的矩陣。我們都知道,如果我們把一個矩陣各個維度的大小寫在一起,會得到一個元組(tuple),這個元組稱為矩陣的shape,我實在是不知道該怎麼翻譯這個單詞,但是我覺得叫做形狀不太妥當,所以就保留了英文原文。轉置之後,矩陣的shape會整個翻轉。比如(3, 2, 4)會變成(4, 2, 3)。

    我們可以來看一個例子,會更加的直觀。首先我們先看最簡單的二維矩陣:

    這是隨機出來的一個3 x 4的二維矩陣,在numpy當中,有兩種方式獲取一個矩陣或者是數組的轉置。第一種方式是通過在數組的變量名之後加上.T操作符,第二種方式是調用numpy中的transpose函數,這兩種方式是一樣的。我個人比較傾向於前者,寫起來比較簡單。

    我們可以看到轉置之後新的矩陣的第一列其實是原矩陣的第一行,第一行是原矩陣的第一列。可以看成是原矩陣按照從左上角到右下角的一條無形的線翻轉之後的結果。

    理解了轉置之後,我們再來看reshape操作。其實我們從這個單詞上也能大概猜到它的意思,reshape也就是再次shape的意思,本意是根據我們想要的shape重新組裝矩陣當中的元素

    我們來看一個例子吧,首先,我們通過arange方法來獲取一個一維的數組:

    因為是1維的,所以我們去看它的shape也只有一維。假設我們不喜歡這樣的一維數組,而想把它變成3 x 4或者是6 x 2的格式,這時候使用reshape就會很方便。

    本質上來說reshape操作其實就是按照順序從矩陣當中獲取元素,然後按照我們制定的shape填充出一個新的矩陣的操作。這個應該不難理解, 它也是非常常用的重塑操作,通過reshape和轉置,我們可以很方便地操作矩陣的大小,根據我們的需要作出改變。

    三元表達式

    在許多編程語言當中我們經常會用到三元表達式,三元表達式其實本質就是if-else語句,只是我們用特殊的方法將它簡寫。

    比如說在C++當中,我們可以把if condition A else B簡寫成:condition ? A : B。Python同樣支持三元表達式,不過對C++的三元表達式做了一些改動,在Python當中三元表達式寫成:A if condition else B。相對來說更加直觀一些,我們經常會在數組初始化的時候用到三元表達式。

    比如,我們可能會這樣生成一個數組:

    arr = [1 if condition else 0 for _ in range(10)]
    

    我們通過條件來判斷了每一位是1還是0來生成了一個數組,簡化了代碼。在numpy當中同樣繼承了這個用法,我們一樣可以使用三元表達式,不過numpy將它封裝進了where函數當中,我們是通過調用一個方法來實現三元表達式的功能。我們來看下具體的用法,假設我們有兩個數組:

    我們還有一個bool型的數組c,我們希望根據c數組選擇從a數組或者是b數組當中獲取數據。我們可以使用where寫成這樣:

    在這個例子當中,c數組中的1和0分別表示True和False。當我們調用np.where的時候,numpy會自動根據c數組當中的值去選擇從a數組還是b數組當中獲取數據。相當於我們執行了這麼一段代碼:

    [x if c else y for c, x, y in zip(c, a, b)]
    

    雖然兩者的運行結果是一樣的,但是顯然使用循環的方法計算耗時更長,而使用numpy的向量做法運算速度更快。除此之外,numpy的where方法還支持高維的數組,但是循環的方法不行。並且where還有一些更高級的用法,比如說我們傳入的第二個和第三個參數,可以不是數組而是一個標量。比如我們可以指定當c中的元素是True的時候填入1,否則填入-1:

    甚至我們還可以將標量和向量結合起來使用:

    並且這裏的數組c也可以替換成邏輯運算:

    總結

    今天的文章主要介紹了Numpy當中的reshape、轉置以及where的用法,這些也是numpy的基礎用法,尤其是轉置、reshape,幾乎是處理數據必用的方法。所以想要從事Python機器學習或者是人工智能的小夥伴,numpy的這些用法是一定要會的。

    本文當中介紹的只是numpy的一些固定套路,但其實numpy很多的用法是可以組合的,一些看似平淡無奇的用法組合在一起之後會有神奇的效果。這一點光看書或者是資料是很難窮盡的,所以如果你已經學會了這些api的基本使用,接下來最應該做的是去讀一些大牛的源碼,看看大牛們是如何運用這些工具的,相信一定還會有新的收貨。

    文章就到這裏,如果喜歡本文,可以的話,請點個關注

    本文使用 mdnice 排版

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※產品缺大量曝光嗎?你需要的是一流包裝設計!

    ※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

    ※回頭車貨運收費標準

    ※推薦評價好的iphone維修中心

    ※超省錢租車方案

    台中搬家遵守搬運三大原則,讓您的家具不再被破壞!

    ※推薦台中搬家公司優質服務,可到府估價

  • WinUI 3 試玩報告

    WinUI 3 試玩報告

    1. 什麼是 WinUI 3

    在微軟 Build 2020 開發者大會上,WinUI 團隊宣布可公開預覽的 WinUI 3 Preview 1,它讓開發人員可以在 Win32 中使用 WinUI。WinUI 3 Preview 1 包含新的 VisualStudio 項目模板,可以創建面向 .NET 5 的 C# 和 C++/Win32 項目。從技術上講,WinUI 3 將 UWP 的 XAML、Composition 和 Input 層分離,並通過NuGet將它們獨立分發給針對Windows 10 版本 1803 及更高版本的 Win32 應用。

    WinUI 3 適用於 Win32 和 UWP,這篇文章主要討論 Win32 的情況。

    2. 理解 WinUI 3

    以前我們總是抱怨 WPF 多年都不提供新的主題,不提供新的控件,性能又沒提升。現在微軟索性把什麼都是新的 WinUI 3 提供給桌面開發,沒 WPF 什麼事了。

    簡單來說,UWP 的開發體驗不好(關於這個話題真是一言難盡),而且出了 Bug 還必須等待下半年的 Windows 更新進行修復,但微軟的開發人員專心給 UWP 的 UI 層加各種功能;.NET Core 更新很快,但很少人有興趣有動力給陳舊的 WPF 的 UI 層進行大幅度的改進。於是 WinUI 將 UWP 的 UI 層從 Windows SDK 的其它部分分離,並將從 Windows 轉移到 Nuget。現在建一個 C++ 或 C#(.NET 5) 程序,再從 Nuget 上裝個 WinUI 3 的包套個 UI 層,一個基於 Fluent Design,觸摸友好,性能無與倫比的應用程序就誕生了。

    上圖列舉了 WinUI 3 和其他平台對比的部分特性,除此之外 WinUI 3 還有很多好處,例如開源、更新更快、更新不與系統版本綁定等,更詳細的內容還是看微軟自己怎麼宣傳吧:

    WinUI – The modern native UI platform of Windows.

    不過要用上 WinUI 3 還要等一年半載。下面是微軟給出的發布路線圖,目前我們也只能用 Preview 版嘗嘗鮮。

    3. 試玩WinUI 3

    要試玩 WinUI 3 首先要有 Windows 10 1803 以上版本的電腦(WinUI 3 最低支持1803),然後還需要使用 Visual Studio 2019 16.7 以上版本(目前只能安裝預覽版)。安裝 Visual Studio 時要把以下工作負載全都選上:

    • .NET 桌面開發
    • 通用 Windows 平台開發
    • 使用 C++ 的桌面開發
    • 適用於通用 Windows 平台負載的 C++(V142) 通用 Windows 平台工具可選組件

    當然 .NET 5.0 也要裝上。

    然後在 https://aka.ms/winui3/previewdownload 下載並安裝 WinUI 3 Project Templates 擴展,這樣才可以在 Visual Studio 創建 WinUI 的項目。

    可選 C++ 或 C# ,這裏我選擇了 C# 的“Blank App, Packaged
    (WinUI in Desktop)”項目,並選擇了對應的 Windows 平台:

    項目創建后 Visual Studio 生成了兩個項目。第一個包含應用的代碼,代碼結構基本和 UWP 一樣,只是少了用於打包應用的 Package.appxmanifest 和一些圖片。從依賴項里可以看到項目已經安裝了 Microsoft.WinUI 3 的包。從項目屬性里可以看到這就是個 .NET 5 的項目。

    Visual Studio 生成的第二個項目是一個 Windows 應用程序打包項目,該項目經配置后可將應用生成為適合部署的 MSIX 程序包。 也就是說 UWP 項目中用於打包的部分被獨立出來了。這個項目還應該是解決方案的啟動項目。運行這個項目后創建的應用會添加到開始菜單中,這點也和UWP一樣。

    到這裏為止都和預期的一樣,我之後還嘗試了將 UWP 應用移植到 WinUI ,基本上只需要將 Windows.UI 命名空間改為 Microsoft.UI就可以了,XAML 和 C# 代碼完全不用變。只可惜目前 WinUI 還很簡陋,Win2D、Community Toolkit 等微軟自己發布的 UWP 包都還沒有 WinUI 版本。而且沒有設計視圖,XAML 視圖也沒有智能感知,現在想要用 WinUI做些什麼有趣的項目會很困難。不過從目前的移植難度上來看,將來正式發布后應該可以完整地將 UWP 的 UI 的開發經驗運用在 WinUI 上。

    4. 和 WPF 及 UWP 進行對比

    既然 WinUI 3 開發模式和 WPF 及 UWP 都很像,我當然對它們之間的對比很感興趣。

    命名

    首先說說命名,“WinUI” 光這個名字就 Win 了。 “UWP” 太高雅,我敢打賭國內有些 UWP 的開發(例如我)都不能好好地把 UWP 的全稱拼出來;“WPF” 好些,但 WPF 的含義也讓人很疑惑。而 Windows UI 簡稱 WinUI ,意義和發音都很清晰明確。不過這三個都比很多人都不會讀的 “Xamarin” 強多了。

    可是有了 WinUI 3 ,就會有人問“那 WinUI 2 呢?”WinUI 2是一個 UWP 的控件庫,當然的只能用在 UWP 上。這就很尷尬了,WinUI 的 3 和 2 根本不是同一個概念,實在很容易讓人混淆,說不定以後會把後綴的 3 去掉(我這篇文章就常常懶得理寫這個3)。而且 UWP 中代碼的命名空間以 Windows.UI 開頭,在 WinUI 3 中則 Microsoft.UI ,按着 Office 365 改名為 Microsoft 365、Bind Ads 改名為 Microsoft Advertising 這些經驗,該不會以後 WinUI 可能改名為 Microsoft UI ,簡稱 MiUI 吧?

    權限

    權限方面是 WinUI 的一個亮點,因為它本質上就是個 Win32 程序,可以放開手腳隨便來。相對的 UWP 有很嚴格的權限限制,開發 UWP 時常常會感到綁手綁腳。例如下面這段代碼,大部分 WPF 開發者都難以想象只是最小化 UWP 程序而已,它就不能好好運行了:

    int count = 0;
    DispatcherTimer timer = new DispatcherTimer();
    timer.Interval = TimeSpan.FromSeconds(1);
    timer.Tick += (s, e) =>
      {
          myButton.Content = count++;
      };
    timer.Start();
    

    UWP 的生命周期如上圖,當 UWP 處於 background 運行或 suspended 狀態時應用基本處於暫停狀態,也也不會處理UI功能。我明白這是 UWP 為了省電、安全等原因才這樣設計,但對開發人員來說真的太不方便。而 WinUI 應用基本上就是個 Win32 應用,目前看來不會有這些坑。

    開發體驗

    說起開發體驗,WPF 好歹還算正常,Visual Studio 的設計視圖運行正常,編譯起來也快。UWP 編譯很慢,設計視圖經常出問題,Blend 也時好時壞把設計師都氣跑了。就算完全按着官方的文檔完成一個 UWP App,甚至一行代碼都不改,發布到商店后還是有可能崩潰。而對於應用商店,真是千言萬語彙聚成一個草花頭。

    現在 WinUI 的 XAML 視圖連智能感知都沒有,也沒有設計視圖,實在沒法談開發體驗。很難猜測正式發布的時候會怎麼樣,希望至少和WPF保持一致吧。

    性能

    WPF 總是給人“慢”的印象,除了因為在它剛出來的時候(10年前)電腦性能不夠導致留下了刻板印象,還有一個主要原因是:它真的很慢。

    UWP 的 XAML 有很優秀的性能表現,除此之外為了照顧已經不存在的 Windows Phone 的貧弱性能,很多控件模版都經過精心設計並大幅簡化。

    為了驗證 WinUI 的性能我寫了下面這些代碼,然後分別移植到 WPF .Net Framework 4.8、WPF .NET 5、UWP、WinUI(WPF 和 UWP/WinUI 的代碼稍微有一點不同):

    for (int i = 0; i < 50; i++)
    {
        var rectangle = new Rectangle
        {
            Height = 500,
            Width = 500,
            Opacity = ((double)i + 40) / 100d,
            RadiusX = 108,
            RadiusY = 98,
            StrokeThickness = 3,
            Stroke = new SolidColorBrush(Color.FromArgb(255, 75, 75, (byte)(i * 250d / 50d))),
            RenderTransformOrigin = new Point(0.5, 0.5)
        };
        Root.Children.Add(rectangle);
        var angle = i * 360d / 50d;
        var transform = new RotateTransform
        {
            Angle = angle
        };
    
        rectangle.RenderTransform = transform;
    
        var storyboard = new Storyboard();
        storyboard.Children.Add(new DoubleAnimation { Duration = TimeSpan.FromSeconds(1), From = angle, To = angle + 360 });
        Storyboard.SetTarget(storyboard, transform);
        Storyboard.SetTargetProperty(storyboard, "Angle");
        storyboard.RepeatBehavior = RepeatBehavior.Forever;
        storyboard.Begin();
    }
    

    上面這段代碼是讓50個矩形旋轉,十分考驗 WPF 的性能。結果可以說出乎意料。

    CPU 內存 GPU
    WPF .NET Framework 4.8 12 60 76
    WPF .NET 5.0 12 85 72
    UWP 3 28 36
    WinUI 5 65 95

    我的環境是 i7-6820HQ 及集成顯卡。WPF 平台佔用 70 多%的 GPU,這我大致能猜到。UWP 十分流暢,GPU 只佔用 WPF 的一半,CPU 和 內存都有出色表現,不過我還以為會更低的。

    WinUI 這個濃眉大眼的我真的萬萬沒想到,不僅掉幀明顯,還佔用了幾乎 100% GPU,也就是說它連這麼簡單的代碼都跑不起來。()順便一提,將測試代碼中旋轉的矩形減少為10個,WPF 的程序佔用 32% GPU,而 WinUI 佔用 70 多%。)

    從上面的數據基本可以說明,WinUI 離設計目標還十分遙遠,畢竟是預覽版,還有一年半載可以慢慢優化。

    5. 結語

    總的來說微軟雄心勃勃,可是現在拿出來的 WinUI 預覽版還差得太遠,功能未完善,性能不及預期。我覺得大致方向沒錯,WinUI 對 C++、WPF、UWP 開發者都是個新的工具新的機遇,可以關注一下。

    6. Q & A

    Windows 7 怎麼辦?

    按微軟公布的路線圖,再包括跳票等因素,等 WinUI 真正可用時 Windows 7 已停止更新很久,到時 Windows 7 的佔有率可能已經下降到開發者不會關心的程度。

    基於 .NET Core 的 Wpf 還是 WinUI?

    假使不想花精力將現有項目遷移到 WinUI,或者對來自 UWP 的 WinUI 沒信心,又或者舍不得 Windows 7 的用戶,並且對觸摸沒需求,當然可以繼續選用 WPF,基於 .NET Core 的 WPF 會是個很好的選擇。

    MAUI 還是 WinUI ?

    MAUI 還在很遙遠的將來(2021年11月),我沒試玩過,所以不好評價。如果有跨平台需求當然只能選 MAUI,如果 WinUI 團隊技高一籌實現了 MAUI 難以企及的超高性能,那就選 WinUI。不過 MAUI 這個名字太過普通/普遍,可能會被逼着改名吧。

    那 UWP 呢?

    權限受限的 UWP 可以說是人畜無害,對用戶來說可能也是個不錯的選擇。而且 UWP 還支持 Xbox 和 Hololens 等平台,目前看來還是有它的市場。

    Winforms 呢?

    人只有忘卻了過去,才能好好活着。

    WinUI 有未來嗎?

    我做了好多年 Silverlight 開發,買了5、6部 Windows Phone 手機,寫了幾十篇 UWP 文章,根據我豐富的經驗,我可以肯定 WinUI 是有未來的。

    8. 參考

    WinUI – The modern native UI platform of Windows.

    Introducing WinUI 3 Preview 1 – Windows Developer Blog

    Get started with WinUI 3 for desktop apps Microsoft Docs

    GitHub – microsoft_microsoft-ui-xaml

    Windows UI Library Roadmap

    WinUI 3.0_ The future of Windows controls

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※回頭車貨運收費標準

    ※產品缺大量曝光嗎?你需要的是一流包裝設計!

    ※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

    ※推薦評價好的iphone維修中心

    ※教你寫出一流的銷售文案?

    台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

    台中搬家遵守搬運三大原則,讓您的家具不再被破壞!

  • 發動機不磨合?機油燒死你!

    還說買了性能車,直接來一發暴力磨合。然而事實是,出廠前就磨合好的車只是佔少數,同時暴力磨合也是一種不合理的磨合方式。所以,作為普通車主,還是不要搞什麼幺蛾子了。另外,磨合的時候多跑高速也是有特定條件的。

    大家常聽老司機說新車要磨合,有所謂的磨合期,那麼磨合到底是什麼鬼?

    發動機是磨合過程中最核心的部分,為了讓內部的活塞和發動機缸體達到完美的活塞運動,這時候就要在它們之間放置活塞環和缸套。

    而磨合的作用,是要讓活塞環與缸套的內壁完美地磨合密封。

    但是因為活塞環有彈性,如果金屬內壁不夠平滑,那就很容易出現各種磨損,最明顯的一個傷害就是燒機油。所以,所謂磨合期,就是要慢慢的讓發動機進行活塞運動,然後讓零件間的接合面打磨得更加貼合,達到最佳狀態。

    不過長期以來,各種鍵盤車神和老司機間都流傳着一些以訛傳訛的說法,比如說新車早就在廠里磨合好,買回來就儘管飆。還說買了性能車,直接來一發暴力磨合。

    然而事實是,出廠前就磨合好的車只是佔少數,同時暴力磨合也是一種不合理的磨合方式。所以,作為普通車主,還是不要搞什麼幺蛾子了。

    另外,磨合的時候多跑高速也是有特定條件的。在跑的過程中多切換不同的擋位和油門深淺,同是不要貪新鮮開個幾百米就算,這樣各類油溫沒起來,會對車輛造成一定損害。

    不過說了那麼多,千言萬語合萬一句,就是要多看看車主手冊。看完這期節目,大家記得要等着看下一期,什麼是燒機油!本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    台北網頁設計公司這麼多該如何選擇?

    ※智慧手機時代的來臨,RWD網頁設計為架站首選

    ※評比南投搬家公司費用收費行情懶人包大公開

    ※回頭車貨運收費標準

    網頁設計最專業,超強功能平台可客製化

    ※別再煩惱如何寫文案,掌握八大原則!

  • 10萬隻能買山寨保時捷?現在能買真X5!

    0T,163馬力)與手動變速箱的組合,又根據外觀的區別分文紅標藍標。而F6S又定位於緊湊級SUV,有多少因為H6型號太多,不知道怎麼選,最後放棄的朋友。報個到。4。女司機賓利無人駕駛俗話說防火防盜防女司機,就在昨天,一位賓利女司機的事故又在朋友圈瘋傳,從視頻上來看她是想去地庫,結果一不小心衝過卡,你跟我說倒車,太難了,直接就下車取卡,誰知道帶你裝逼帶你飛的賓利不帶女司機玩,自己跑了,拉都拉不住。

    1. 勞斯萊斯全路況車型 Cullinan庫里南

    由於全球市場SUV的熱銷,越來越多的豪車廠商紛紛下海(保時捷,瑪莎拉蒂,阿爾法羅密歐)隨着賓利添越的發布與熱賣,勞斯萊斯也公布了旗下首款非SUV的諜照,(官方一直表明這隻是全路況汽車,並非SUV)然而新車的名字Cullinan被網友戲稱為苦力男,也不是沒有道理,這車的車主腰部運動量肯定較常人多,如果非要有個正經的命名法則,應該是源於迄今為止世界上最大的鑽石。

    其實早在2015年海外媒體就跟蹤報道過,當時的測試車看着就像加了尾翼底盤抬高的幻影,從目前這款車的諜照來看,勞斯萊斯Cullinan將會採用和幻影相類似的車身設計,並且極有可能搭載和幻影一致的6.8L V12發動機。

    2. 東風景逸X5

    眼看今年只有兩個月不到了,還在為過年回家開的車沒面子感到煩擾嗎,沒問題,現在有這麼款車,名字叫x5,德國外形設計。

    極具科技感的內飾。

    看到這種配方你們以為說的是眾泰嗎?too young too naïve,而是最新的東風景逸X5,官方消息表示新車將於本月17號正式上市,搭載1.6和2.0升發動機,匹配5速、6速手動變速箱和CVt自動變速箱。沒有眾泰那麼直接的借鑒加上最後十萬左右的價格(9到12萬),對過年有信心了嗎?

    3. H6轎跑版哈弗F6S

    就在前陣的廣州車展,哈弗推出了旗下高端品牌wey,近日工信部又表示哈弗將推兩款定位高於H6的SUV,或將命名為F6和F6S,儘管換了新名字,不過還是基於H6平台打造。

    除了2.0T加上雙離合的變速箱,F6還將增加柴油發動機(2.0T,163馬力)與手動變速箱的組合,又根據外觀的區別分文紅標藍標。而F6S又定位於緊湊級SUV,有多少因為H6型號太多,不知道怎麼選,最後放棄的朋友?報個到。

    4. 女司機賓利無人駕駛

    俗話說防火防盜防女司機,就在昨天,一位賓利女司機的事故又在朋友圈瘋傳,從視頻上來看她是想去地庫,結果一不小心衝過卡,你跟我說倒車,太難了,直接就下車取卡,誰知道帶你裝逼帶你飛的賓利不帶女司機玩,自己跑了,拉都拉不住。

    你以為這樣就完了嗎?被撞那堵牆的另一側,更是一度上演死神來了的劇本,好在那位大叔瞬間使出凌波微步,僥倖避開事故,有人說女司機真沒素質,又是在車尾裝流氓燈,又是連p擋都不會掛,也有人說賓利這麼一個豪華品牌居然沒有開門自動掛p擋的功能,差評,不管怎樣,這位女司機又給女同胞順利掛上了一個女司機的負面標籤。

    5.J.D power 年度中國最靠譜汽車品牌前兩名為路虎和mini

    近日,J.D. power 發布了2016年中國車輛可靠性研究SM(VDS),引來一片質疑,為什麼會這樣呢?因為今年被評為最可靠的品牌分別為路虎(豪華車)和MINI(主流車)。

    不管路虎的越野性能有多出色,但是在以往J.D. power 的排名中幾乎是墊底的。甚至被調侃到如果發現一輛路虎沒有漏油,說明油漏完了,在公布成績后JD power也被調侃,JD(假的)嘛,肯定是假的咯,在這裏奶茶妹夫表示無故躺槍。(京東也算JD)本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

    網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

    ※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

    南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

    ※教你寫出一流的銷售文案?

    ※超省錢租車方案

    ※回頭車貨運收費標準

  • 厲害word哥!上汽打算今年賣30萬輛車!

    99萬)11月銷售1。2萬輛榮威 RX5搭載1。5T/2。0T發動機,MT/AT可選,參考價格(9。98萬至18。68萬)11月銷量2。1萬輛其中70%為互聯網版本乘着廣州車展的東風,11月上汽榮威品牌成績斐然,傳統熱銷車型榮威360和榮威350月銷售均破萬,累計銷量超1。

    “國家政策添把火,國內廠商出爆款”來形容2016年的車市並不為過。近日,自主品牌一哥上汽傳來一則好消息,通過其爆款互聯網車型“RX5”的熱銷,已提前完成了2016年全年的銷售指標,劍指年銷售30萬量的目標(月2.5萬/輛),穩坐中國自主品牌領導者的地位。

    榮威350

    搭載1.5L發動機,MT/AT可選,

    參考價格(7.87萬至9.97萬)

    11月銷售1.2萬輛

    榮威360

    搭載1.5L/1.4T發動機,MT/AT可選,

    參考價格(7.59萬至12.99萬)

    11月銷售1.2萬輛

    榮威 RX5

    搭載1.5T/2.0T發動機,MT/AT可選,

    參考價格(9.98萬至18.68萬)

    11月銷量2.1萬輛

    其中70%為互聯網版本

    乘着廣州車展的東風,11月上汽榮威品牌成績斐然,傳統熱銷車型榮威360和榮威350月銷售均破萬,累計銷量超1.2萬輛。帶有馬雲爸爸光環的RX5更熱銷21344輛,三款熱銷車型帶動品牌增長超過173%,創上汽集團歷史新高,縱觀國內車市,消費者對自主品牌和互聯網汽車的認同感不斷提高,榮威品牌更獲得消費者的強烈認可。

    自主品牌汽車與互聯網的結合,開始很多人並不看好,但上汽用一張漂亮的成績單告訴質疑者,在“陳虹爸爸”和“馬雲爸爸”的全力支持下,自主品牌也可以有越級的品質、各種黑科技,更重要的是,讓中國消費者買得起,用的爽,隨着榮威新一代產品Erx5和i6燈發布上市,必然會掀起一陣購車熱潮。

    未來的車型發展中,上汽更深耕“互聯網概念汽車”和“新能源汽車”等技術,搭載更多貼合潮流和先進技術的汽車推出市面,如一發布就引起各方興趣的MG-ZS、榮威I6等,讓人拭目以待吧。

    本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

    網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

    ※Google地圖已可更新顯示潭子電動車充電站設置地點!!

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    ※別再煩惱如何寫文案,掌握八大原則!

    網頁設計最專業,超強功能平台可客製化

    ※回頭車貨運收費標準

  • 12萬就能買德國旅行車 試駕大眾蔚領

    12萬就能買德國旅行車 試駕大眾蔚領

    這時你可以選擇切到S擋,這時你就可以激活一下蔚領的潛在運動基因,讓它活潑一些,也讓自己小小放肆一回。而蔚領的懸挂行程得到了增加,正常行駛沒有什麼問題,遇上爛路的話你只能包容一下了。作為一輛跨界屬性的車型,沒有一個體面的後備廂,是沒有說服力的。

    六年時間,無論是對於人還是事,都是一段不短的時間了。如果說一輛車花了六年時間來研發,那它推出市場后的反響,直接就能定義它是否成功了。這對於一汽大眾蔚領來說,它面對的處境是很相似的。

    近期一汽大眾的大新聞莫過於和奧迪間的瓜葛,但回到產品上來說,新上市的蔚領也是吸引了不少眼球。蔚領的定位其實有點模糊,長着旅行車的身版,標配沒卵用的行李架,又有摻了點跨界風。而它的外觀最大的亮點,我覺得應該是在於它的尾燈造型了。但是相對於現在套娃風來說,還算有點誠意了。

    EA211 1.4T發動機+DQ2007速乾式雙離合變速箱,這套動力單元的搭載給人的感覺就和豆漿油條一樣,基於pQ34平台,一切的配方都是那麼熟悉。

    所以蔚領一上手,你還是會不由自主的覺得,這是一輛大眾。D擋模式下,你要車子很快的走起來,那就得來多點油,雖然扭矩有小幅提升,但低扭輸出還是差不多。這時你可以選擇切到S擋,這時你就可以激活一下蔚領的潛在運動基因,讓它活潑一些,也讓自己小小放肆一回。

    蔚領的內飾個人而言還是可以接受的,雖然都是一片硬塑料,拋開質感而言,說得過去。

    蔚領提供了1.4T和1.6L兩款發動機型號可選,目前的售價區間為12.59-16.29萬元。能接受兩廂車造型,憧憬一家大小在周末出外休閑的朋友,現在就多了一個選擇了。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    ※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

    南投搬家公司費用需注意的眉眉角角,別等搬了再說!

    ※教你寫出一流的銷售文案?

    ※回頭車貨運收費標準

    ※別再煩惱如何寫文案,掌握八大原則!

  • 豪華新標杆 這台又新又帥的合資SUV讓奔馳寶馬震驚了

    豪華新標杆 這台又新又帥的合資SUV讓奔馳寶馬震驚了

    看起來漂亮些嗎。我告訴他,是性能。性能是一台豪車最內在的地方,而豪車之間差距最大的則在於動力系統和科技水平,比如說XT5的2。0T發動機動力強大198KW/400牛米,這樣的強大動力推動XT5動力綽綽有餘,而同級別的奧迪Q5僅為169kw,奔馳GLC更是僅有135kw。

    目前的中國豪車市場上,奧迪Q5和寶馬X3車型偏老,遲遲未換代的尷尬一直存在,老舊的設計以及技術平台使得它們的性能表現差強人意,而GLC雖然新上市,但是加價過高,性價比比較低。

    但是XT5的出現打破了這種局面,XT5一經上市便引爆市場,銷量超過了德系老將寶馬X3,XT5的到來為這個市場吹進了一股新風,而XT5出現之後,其他的產品似乎變得黯淡無光,而在小編看來XT5也確實是這個價位最值得推薦的SUV車型。為什麼呢?

    龐大尺寸 有容乃大

    外觀設計是豪華SUV的消費者十分注重的一個方面,一個氣派的造型設計很大程度上決定了它的成功與否,而XT5的外觀設計十分有特點,氣派不失時尚。4812*1903*1685也全面碾壓BBA車型。4813mm的長度是什麼概念呢?百萬級SUV奔馳GLE長度也不過是4813mm而已。花一台GLC的錢買一台GLE級別的SUV,你說划不划算呢?

    而大尺寸帶來的最直接的好處就是大空間,XT5的空間表現十分驚人。相比之下奧迪Q5/奔馳GLC表現就相形見絀了。得益於2857mm的超長軸距,XT5的內部乘坐空間十分寬敞,每個乘客擁有的都不止是一席之地。

    而且XT5的裝載空間也十分巨大,XT5在常規狀態下行李箱容積便已經達到了584升,而放倒後排座椅之後容積更是高達1634升,相當於一部廂式小貨車的空間了,不過還不止如此。XT5有着多種車內空間的組合方式,支持4/6比例放倒的後排座椅可以靈活兼顧坐人和拉貨的需求,空間靈活性做得十分優秀。

    反觀對手奧迪Q5和奔馳GLC的裝載空間,奧迪Q5的行李箱容積為540升,軸距也僅為2807mm,而奔馳GLC甚至都沒有公開它的尾箱容積數據。

    澎湃動力 智能四驅

    有人問我豪車和普通車型差別到底在哪?看起來漂亮些嗎?我告訴他,是性能。

    性能是一台豪車最內在的地方,而豪車之間差距最大的則在於動力系統和科技水平,比如說XT5的2.0T發動機動力強大198KW/400牛米,這樣的強大動力推動XT5動力綽綽有餘,而同級別的奧迪Q5僅為169kw,奔馳GLC更是僅有135kw。在動力上的差距就尤其明顯了。

    再比如XT5的智能雙離合適時四驅系統使得車輛的動力能夠在前後軸之間實現0~100%的扭矩分配,在運動和經濟以及通過性上取得完美均衡。為什麼前後軸的0~100%扭矩分配這麼重要呢?車輛在不同狀態下前後軸需要的動力是不一樣的,比如在山路就需要把更多動力分配給後輪,提高操控靈活性;在雪地就需要更多的實現前後50:50的動力分配來保證穩定性,而在高速則可以變成前驅車達到節油目的,XT5的四驅系統就能夠實現0~100%的扭矩分配。

    而奔馳GLC的4matci四驅系統和奧迪Q5的quattro四驅系統屬於全時四驅,不管在什麼狀態下都是四驅,而我們日常使用實際上是用不到四輪驅動的,而四驅會帶來高油耗,因此奔馳/奧迪的全時四驅車型能夠省油嗎?

    如果你說你只看四驅系統實力不在乎油耗,奧迪能打敗XT5嗎?不能!奧迪Q5的quattro四驅系統最多只能將85%的動力傳遞給後輪,前輪最多也只能接受70%的動力,相比XT5來說,弱爆了~

    總結:

    為什麼XT5的性價比/性能會如此突出呢?眾所周知BBA在中國的價格一直虛高,花了40萬隻能買到30萬的品質,但是許多人對BBA盲目追捧,即使是X3這樣的老產品也能有春天,而這些價格虛高的產品也一定程度上凸顯了XT5的性價比,因而一直保持高裝備水平的XT5的也就更加顯得划算了。

    XT5的出現是必然,豪華SUV市場就應該是百花齊放的,而配置高動力強勁內外裝備也足夠奢華的XT5獲得成功是必然,XT5的出現為豪華SUV市場樹立了一個新的標杆,使用最具性價比的價格打造一檯面面俱到的優秀SUV,到目前也只有凱迪拉克XT5做到了。動力性和空間上的優勢是德系豪車無法相比的,想要追上XT5,德系還需要再換一次代才行!本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

    網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

    ※想知道最厲害的網頁設計公司"嚨底家"!

    ※別再煩惱如何寫文案,掌握八大原則!

    ※產品缺大量曝光嗎?你需要的是一流包裝設計!

    ※回頭車貨運收費標準

    台中搬家公司費用怎麼算?

  • 12萬左右到底是買SUV還是轎車比較好?

    12萬左右到底是買SUV還是轎車比較好?

    誠然,1。6L發動機在扭矩輸出方面弱於1。2T,但是居家過日子,還是1。6L會更讓人省心。1。6L+CVT的這套動力組合,雖然給不了你太多激情,但是輸出平順線性,易於操控,質量可靠,就像春雨一樣,潤物細無聲。得益於較高的車身,即便精英版配有天窗,頭部空間依然很充裕。

    前言

    12萬左右買SUV還是轎車,估計這是許多人糾結的問題。但實際上問題其實很簡單,為何這麼說?下面聽我娓娓道來。

    首先這個價位,能挑選的主流合資小型SUV是幾乎沒有的。剩下一些非主流的貨,例如創酷與2008,這兩車是比小型SUV還要小一點點的車,因此我也不作推薦。

    在12萬內想買到SUV就唯有投身自主品牌的懷抱,但是買轎車卻有許多花樣選擇。所以我就推薦幾款自主品牌的SUV與合資家轎來給各位參考一下。

    廣汽乘用車-傳祺GS4

    2017款 200T G-DCT兩驅舒適版

    指導價:11.58萬

    編者點評:

    GS4的雙離合變速箱算是自主品牌當中匹配較為完善的一個,無論是高速巡航,還是低速跟車都表現得相當出色,不會展露出明顯的頓挫。同時,由於雙離合變速箱的傳動效率較高,其百公里綜合油耗在7.8L左右,在同級別中難遇敵手。

    底盤也是GS4一個最大的亮點,當車子碾過不平的路面時,懸架總能很好地吸收震動,給人滿滿的厚實感。更難能可貴的是,遇到大坑窪時,GS4依舊可以不露餡,不會讓乘客有種懸架極限已到的感覺。

    廣汽豐田-雷凌

    2016款 1.6G CVT精英版

    指導價:12.48萬

    編者點評:

    自從雷凌出了1.2T發動機以後,1.6L的日子恐怕即將到頭,所以現在終端也會有1萬塊以上的優惠,絕對是抄底的好時機。停產不代表1.6L這款發動機不行,相反地,這款發動機是日本原裝進口,各種配合精度都會優於國產。誠然,1.6L發動機在扭矩輸出方面弱於1.2T,但是居家過日子,還是1.6L會更讓人省心。

    1.6L+CVT的這套動力組合,雖然給不了你太多激情,但是輸出平順線性,易於操控,質量可靠,就像春雨一樣,潤物細無聲。得益於較高的車身,即便精英版配有天窗,頭部空間依然很充裕。同時,後排地台全平還配有中央頭枕,坐在中間的乘客也不會太難受,這點想得很周到。

    一汽-大眾-寶來

    2016款 1.6L 自動時尚型

    指導價:11.98萬

    編者點評:

    寶來剛出的時候,許多人都針對其拉皮車的身份責罵一番。但是,是否是舊平台其實並不十分重要,關鍵還是要看實際的產品力。從這方面來說,寶來的表現還是不錯的。1.6L+6擋手自一體的動力組合,動力還算輕快,變速箱的邏輯清晰,換擋平順,高速巡航時也有很好的油耗表現。

    懸挂濾震有韌性,行駛質感有所提升,座椅也變寬大,坐到裏面感覺更舒適。缺點也是有一點點,中控台並沒有重新設計,顯得有點老氣,整車的做工精細度不足,一些接縫處的間隙較大。

    編者總結:

    雖然SUV現在銷售火爆,但是同品牌下的SUV定價多數都高轎車那麼一些。12萬這個價錢左右想買車,如果不是對SUV有剛性需求的, 還是建議買合資家轎。現在的國產SUV儘管發展得紅紅火火,但是在可靠性上與合資車型依舊有差距,為了日後省心地過日子,合資家轎會是更好的選擇。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    ※別再煩惱如何寫文案,掌握八大原則!

    ※教你寫出一流的銷售文案?

    ※超省錢租車方案

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    ※產品缺大量曝光嗎?你需要的是一流包裝設計!

    ※回頭車貨運收費標準